Let's say I have five datasets (dat1, dat2, dat3, dat6, and dat8) and I have a few operations I need to apply to each of them. I could, of course, just write out a separate data step for each data set, but I'm wondering if there's a way to combine it into a macro, something like the following:
%macro dostuff;
%do i in (1 2 3 6 8);
data dat&i; set dat&i;
<operations>
run;
%end;
%mend;
%dostuff;
Similarly, could I iterate over a series of characters? (e.g. do i in ("horse" "giraffe" "pony" etc...) )
%macro oink;
%let list=1 2 3 6 8;
%do i=1 %to %sysfunc(countw(&list));
%let value=%scan(&list,&i,%str( ));
%put value &value;
%end;
%mend;
%oink
Works if &list is character or numeric or mixed.
%macro oink;
%let list=1 2 3 6 8;
%do i=1 %to %sysfunc(countw(&list));
%let value=%scan(&list,&i,%str( ));
%put value &value;
%end;
%mend;
%oink
Works if &list is character or numeric or mixed.
Similarly, you can accomplish the same thing by using call execute. e.g.:
data cow horse pig;
set sashelp.class;
run;
data _null_;
length excmd $255;
length dset $32;
do dset='cow', 'horse', 'pig';
excmd=catx(' ','data',dset,'; set',dset,';');
call execute(excmd);
excmd='newheigt=height-20;';
call execute(excmd);
call execute('run;');
end;
run;
Join us for SAS Innovate April 16-19 at the Aria in Las Vegas. Bring the team and save big with our group pricing for a limited time only.
Pre-conference courses and tutorials are filling up fast and are always a sellout. Register today to reserve your seat.
Learn how use the CAT functions in SAS to join values from multiple variables into a single value.
Find more tutorials on the SAS Users YouTube channel.