简单SAS宏错误

And*_*rea 1 macros sas

我正在测试宏循环。代码很简单,但是总是出现错误消息“宏函数%SCAN有太多参数”。无法理解原因。有人可以解释吗?谢谢!代码是:

%macro test;
 proc sql;select distinct tj, max(tj) into: tp separated by ",", : maxtp from ASA_k where tj>0;quit;    

 %do i=1 %to &maxtp.;
  %let timep=%scan(&tp.,&i.,",");
  %put &timep.;
 %end;

%mend;

%test;
Run Code Online (Sandbox Code Playgroud)

小智 5

在宏变量中,您存储用逗号分隔的值,这些逗号是有问题的。您需要在使用%bquote宏函数解析宏变量之后屏蔽它们。另外,%scan函数中的第三个参数不正确,因为分隔符为,"。您只需要使用%str宏功能屏蔽逗号即可。就像这样:

%macro test;
 proc sql;
     select distinct tj, max(tj) 
     into :tp separated by ",", :maxtp 
     from ASA_k 
     where tj>0;
 quit;    

 %do i=1 %to &maxtp.;
  %let timep=%scan(%bquote(&tp.),&i.,%str(,));
  %put &timep.;
 %end;
%mend;

%test;
Run Code Online (Sandbox Code Playgroud)