Question

Hi I have a program to use one macro to call another one.

I have two month(jun12 and jul12) and each month has two parts(1 & 2), I want to do a loop which I construct a macro called"Loop", Inside it, I constructed a Array, and used Do comment do call a macro "try".

Seems like it doesn't work. Can someone help me with it? Thank you!

 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
Was it helpful?

Solution

You can't have an array of macro variables.

The simplest way to repeatedly call a macro with a list of parameters is to make a dataset with those parameters and call it from the dataset, either with CALL EXECUTE or using PROC SQL to create a macro list of macro calls.

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;

That only works if you have less than 20,000 characters worth of calls or so - if it's more than that you need to try a different option (%include file or call execute).

OTHER TIPS

So right now it's something like this

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
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top