2017-02-23 441 views
0

我想要一個程序,通過宏變量名稱列表循環,並返回%DO循環內的每個宏變量的值,而不是僅返回宏變量名稱。SAS通過宏變量循環

%let macro_list = AA BB CC; 
%let loop = %sysfunc(countw(&macro_list.)); 

%let AA = 123; 
%let BB = 456; 
%let CC = 789; 

%macro test(); 

    %do i = 1 %to &loop.; 

%let var = %scan(&macro_list.,&i); 
%put &var.; /* I want this to return 123 not AA!!!*/ 

    %end; 
%mend test; 

%test; 

目前宏返回AA,BB,CC,而不是123,456,789

我也將開放給實現這個的其它方式的價值。謝謝!

+0

當你詢問'&var'時,它返回'var'的值,它是列表中的一個。請求'&& var.',並返回'&AA',然後解析爲123.谷歌「解析雙和號和SAS」以獲取更多信息。 – mjsqu

回答

2

您需要添加更多&

%put &var = &&&var ; 

或使用%superq()功能。

%put &var = %superq(&var) ; 
+0

謝謝,我在排除故障的過程中嘗試了兩次&&應該已經到了三次&&& !!! %superq()看起來整潔,應該更易於閱讀。 – Wolfspirit