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