简单SAS宏中的错误

时间:2016-10-06 06:38:27

标签: 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;

1 个答案:

答案 0 :(得分:4)

在宏变量中,您存储以逗号分隔的值,这些逗号是有问题的。您需要在使用%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;