2017-02-23 112 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