[英]Using SAS SET statement with numbered macro variables
我正在嘗試在SAS DI Studio中創建一個自定義轉換,以執行一些我想經常重復使用的復雜處理。 為了實現這一目標,第一步,我試圖復制一個簡單的APPEND轉換的功能。
為此,我啟用了多個輸入(最多10個),並嘗試利用此處引用的&_INPUTn
和&_INPUT_count
宏變量。 我想簡單地使用代碼
data work.APPEND_DATA / view=work.APPEND_DATA;
%let max_input_index = %sysevalf(&_INPUT_count - 1,int);
set &_INPUT0 - &&_INPUT&max_input_index;
keep col1 col2 col3;
run;
但是,我收到以下錯誤:
錯誤:編號的數據集列表(WORK.SOME_INPUT_TABLE-WORK.ANOTHER_INPUT_TABLE)缺少數字后綴
因為宏變量解析為它們引用的數據集的名稱,其名稱不符合
SET dataset1 - dataset9;
聲明。 我該如何解決?
非常感謝。
您需要創建一個遍歷列表並解析變量的宏。 就像是
%macro list_tables(n);
%do i=1 %to &n;
&&_INPUT&i
%end;
%mend;
data work.APPEND_DATA / view=work.APPEND_DATA;
%let max_input_index = %sysevalf(&_INPUT_count - 1,int);
set %list_tables(&max_input_index);
keep col1 col2 col3;
run;
SET語句將需要一個實際數據集名稱的列表,因為它們可能不會形成數字后綴名稱的序列。
如果已經在運行宏,則可以使用宏%DO循環。 確保不在%DO循環內生成任何分號。
set
%do i=1 %to &_inputcount ; &&_input&i %end;
;
但是,您也可以使用數據步驟將名稱連接到一個宏變量中,然后可以在SET語句中使用該宏變量。
data _null_;
call symputx('_input1',symget('_input'));
length str $500 ;
do i=1 to &_inputcount;
str=catx(' ',str,symget(cats('_input',i)));
end;
call symputx('_input',str);
run;
data .... ;
set &_input ;
...
數據步驟頂部的額外CALL SYMPUTX()將處理count為1的情況,而SAS僅創建_INPUT
宏變量,而不創建帶有數字后綴的一系列宏變量。 這會將_INPUT1設置為_INPUT的值,以便DO循環仍然起作用。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.