Search code examples
sassas-macro

sas macro call macro


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

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).