0

嗨,我有一个程序可以使用一个宏来调用另一个宏。

我有两个月(jun12 和 jul12),每个月都有两个部分(1 和 2),我想做一个循环,我构造了一个名为“Loop”的宏,在其中,我构造了一个数组,并使用了 Do comment do调用宏“尝试”。

好像行不通。有人可以帮我吗?谢谢!

 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
4

2 回答 2

0

你不能有一个宏变量数组。

使用参数列表重复调用宏的最简单方法是使用这些参数创建数据集并从数据集中调用它,或者使用 CALL EXECUTE 或使用 PROC SQL 创建宏调用的宏列表。

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 个字符时才有效 - 如果超过了您需要尝试不同的选项(%include 文件或调用执行)。

于 2012-11-28T14:21:13.007 回答
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
于 2012-11-29T18:28:46.900 回答