我有一個SAS數據集值傳遞SAS數據集列作爲宏參數
yyyymm
201605
201606
201607
201608
201609
我試圖找到一種方法同時通過這些值一個宏,使得
do while dataset still has value
%macro passdata(yyyymm);
end
我如何在SAS中做到這一點。有人可以幫助一個示例/代碼片段。
我有一個SAS數據集值傳遞SAS數據集列作爲宏參數
yyyymm
201605
201606
201607
201608
201609
我試圖找到一種方法同時通過這些值一個宏,使得
do while dataset still has value
%macro passdata(yyyymm);
end
我如何在SAS中做到這一點。有人可以幫助一個示例/代碼片段。
試試這個例子,嘗試修改,以滿足您的需求......從「源」數據集,我們可以使用呼叫symput()將宏令牌分配給每個觀測(由SAS自動數據集變量ň如此分化My_token1,My_token2等)一旦你定義了一組宏變量,只需循環它們即可!該程序將打印從源中的所有個人記錄到SAS日誌:
data source;
do var=1000 to 1010;
output;
end;
run;
data _null_;
set source;
call symput(compress("My_token"||_n_),var);
run;
%put &my_token1 &my_token4;
%Macro neat;
%do this=1 %to 11;
*Check the log.;
%put &&My_token&this;
%end;
%mend;
%neat;
正如先前評論中提及,一個方式來傳遞參數是通過調用執行程序。請注意,這必須在datastep環境中完成。這些行是從您輸入的集合中讀取的。
您可以輸入多個變量。只需在'||'中添加更多變量分隔符。請注意,變量中可能有很多空格。 (==謹慎對照)
這是一個小的示例代碼。測試。
data start_data;
input date_var ;
datalines;
201605
201606
201607
201608
201609
;
run;
%macro Do_stuff(input_var);
%put 'Line generates value ' &input_var;
%mend do_stuff;
data _null_;
set start_data;
call execute('%do_stuff('||date_var||')' );
run;
你在上面做什麼聽起來更像是你不需要一個宏,只需要一個正常的數據步驟。 '數據要;設置your_dataset;運行;'看起來就是這樣。你能解釋一下爲什麼這不適合你的需求?什麼是'%passdata'在做什麼? – Joe
看看CALL EXECUTE。該文檔可能正好是你正在尋找的樣本,否則,這裏是一個完整的代碼示例https://gist.github.com/statgeek/beb97b1c6d4517dde3b2 – Reeza