您好,我有一个程序可以使用一个宏来调用另一个宏。
我有两个月(jun12和jul12),每个月有两个部分(1& 2),我想做一个循环,我构建一个名为“Loop”的宏,在里面,我构建了一个数组,并且使用do comment做一个宏“try”。
似乎不起作用。有人可以帮我吗?谢谢!
LIBNAME EC100006 "G:\sample";
%MACRO try(month=,part=);
...FROM EC100006.monthitsum&month.lag&part AS t1
%MEND try;
%Macro test;
ARRAY Mon(2) jun12 jul12;
%Do i=1 %to 2;
%Do j=1 %to 2
%try(month=Mon(i),part=j)
%End
%End
%Mend test;
%test
答案 0 :(得分:0)
您不能拥有一系列宏变量。
使用参数列表重复调用宏的最简单方法是使用这些参数创建数据集,并使用CALL EXECUTE或使用PROC SQL创建宏调用的宏列表,从数据集中调用它。 p>
data call;
input month $ part;
datalines;
jun12 1
jul12 2
;;;;
run;
proc sql;
select cats('%try(month=',month,',part=',part,')') into :mcalllist
separated by ' '
from call;
quit;
&mcalllist;
仅当您的呼叫数量少于20,000个字符时才有效 - 如果超过您需要尝试其他选项(%包含文件或调用执行)。
答案 1 :(得分:0)
所以现在就是这样的
LIBNAME EC100006 "G:\sample";
%MACRO try(month=,part=);
...FROM EC100006.monthitsum&month.lag&part AS t1
%MEND try;
Data Array
ARRAY Mon{2} jun12 jul12;
RUN;
%Macro test;
%Do i=1 %to 2;
%Do j=1 %to 2
%try(month=Mon(i),part=j)
%End
%End
%Mend test;
%test