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

Sas宏:对数组中的每个元素运行宏,sas,Sas,我试图为数组中的每个元素调用另一个宏。这是对同一问题的更简单描述。我希望宏在另一行中打印每个变量,但它没有。为什么?如何解决这个问题 %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

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

%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)

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

所发布的代码在以空格分隔的变量名列表中为每个项目记录一行

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

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

您能给我们看一下日志和您的期望吗?我不完全理解您在寻找什么。我希望日志中有var1\n var2\n var3\n,但日志中根本没有任何内容,没有任何内容打印到日志中。您的代码工作正常。也许您只需要重新启动SAS并再次提交?谢谢richard。我将稍后测试这是否解决了我的问题,并相应地接受。