簡體   English   中英

使用帶有編號宏變量的SAS SET語句

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM