我正在测试宏循环。代码很简单,但是总是出现错误消息“宏函数%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)