2017-01-23 122 views
2

我有一個SAS數據集值傳遞SAS數據集列作爲宏參數

yyyymm 
201605 
201606 
201607 
201608 
201609 

我試圖找到一種方法同時通過這些值一個宏,使得

do while dataset still has value 
%macro passdata(yyyymm); 
end 

我如何在SAS中做到這一點。有人可以幫助一個示例/代碼片段。

+0

你在上面做什麼聽起來更像是你不需要一個宏,只需要一個正常的數據步驟。 '數據要;設置your_dataset;運行;'看起來就是這樣。你能解釋一下爲什麼這不適合你的需求?什麼是'%passdata'在做什麼? – Joe

+1

看看CALL EXECUTE。該文檔可能正好是你正在尋找的樣本,否則,這裏是一個完整的代碼示例https://gist.github.com/statgeek/beb97b1c6d4517dde3b2 – Reeza

回答

-1

試試這個例子,嘗試修改,以滿足您的需求......從「源」數據集,我們可以使用呼叫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; 
+0

沒有解釋的代碼不是一個好的答案。請解釋發生了什麼,以及爲什麼這是一個很好的解決方案,而不僅僅是提供代碼。 – Joe

+0

我根據您的建議添加了一些上下文。謝謝。 – procpy

3

正如先前評論中提及,一個方式來傳遞參數是通過調用執行程序。請注意,這必須在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;