Another approach -- using the data step routine to loop through the date range and inner-loop (1-10) range and call the execute routine to invoke the macro.
*Table to show the macro parameters;
proc sql;
create table temp
(
DATE char(12),
CAT char(3),
FFmt char(6)
);
quit;
*Dummy macro definition that inserts the macro parameters into the temp table;
%macro MMacro(date=,CAT=,Ffmt=);
proc sql;
insert into temp
values ("&date","&cat","&ffmt");
;quit;
%mend;
*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~;
*User input macro variables;
%let sdt = 23AUG2020;
%let edt = 05SEP2020;
%let inner_loops = 10;
*Loop through date range and number of inner_loops;
data _null_;
format i date9.;
day_cnt=0;
do until(i>="&edt"d);
n_cnt=1;
i=intnx('day', "&sdt"d, day_cnt);
do j=1 to &inner_loops;
str=cats('%MMacro(date=', cats("'", put(i, date9.), "'d"), ',CAT=X', n_cnt,',Ffmt=FF', n_cnt, 'F.);'); *<---- Build the command;
call execute(str); *<---- Execute the "str" command;
n_cnt+1;
end;
day_cnt+1;
end;
run;
*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~;
*Check all of the macro parameter values that were used;
proc print data=temp;
run;
... View more