Sas宏:对数组中的每个元素运行宏

时间:2018-08-22 12:18:12

标签: sas

我试图为数组中的每个元素调用另一个宏。这是对相同问题的更简单描述。我希望宏在另一行中打印每个var,但是不会。为什么?如何解决?

%macro test(varlist);
%local var i ;
%do i = 1 %to %sysfunc(countw(&varlist)) ;
  %let var = %scan(&varlist,&i) ;
  %put looped var is &var;

%end ;
%mend test;

%test(var1 var2 var3)

1 个答案:

答案 0 :(得分:1)

SAS宏不包含数组结构。但是,在SAS Macro中,可以按类似数组的方式处理描述分隔项列表的文本序列。所描绘的项目可以表示其他可以进一步利用或作为源代码进行进一步处理的事物。

发布的代码在要调用的变量名称的空格分隔列表中,每项记录一行。

SAS日志

1    %macro test(varlist);
2    %local var i ;
3    %do i = 1 %to %sysfunc(countw(&varlist)) ;
4      %let var = %scan(&varlist,&i) ;
5      %put looped var is &var;
6
7    %end ;
8    %mend test;
9
10   %test(var1 var2 var3)
looped var is var1
looped var is var2
looped var is var3

对于代码,尤其是宏代码,不是预期的loggin信息,可能还有其他不正确的编程语句正在更改预期状态。您可能有不平衡的引号,导致宏源代码被视为另一步骤的一部分。有时,当执行者无法返回到适当的“就绪”状态时,重新启动SAS会话是最佳的做法。