Hello
What is the way to create code that run macro based on 2 arguments from data set?
The question is actually how to create this code austomatically?(In real word the data set includes many rows so I am looking for a way to run the macro from these values automatically)
%RRR(VAR=Wealth ,Format=F1MT )
%RRR(VAR=obligo ,Format=F2MT )
%RRR(VAR=LoansBal ,Format=F3Mt )
%macro RRR(VAR,Format);
proc sql;
create table a_dist_continuous as
select Left("&VAR.") as Var_name LENGTH=300,
put(&VAR.,&Format.) as Cat LENGTH=100,
count(*) as nr&mon.,
calculated nr&mon./(select count(*) as total_nr from ttt) as tamhil&mon. format=percent8.2
from ttt
group by calculated CAT
;
quit;
%mend RRR;
Data MAcro_need_to_run;
infile datalines dsd;
input field $ Fmt $;
cards;
Wealth,F1MT
obligo,F2MT
LoansBal,F3Mt
;
Run;
proc format;
value F1MT
.='(b1) NULL'
0='(b2) 0'
0<-1000='(b3) 0-1K'
1000<-5000='(b4) 1-5K'
5000<-High='(b5) 5K+'
Low-<0='(b6) Neg'
other='(b7) other'
;
Run;
proc format;
value F2MT
0-100='(b1) POS 0-100'
100<-High='(b2) POS 100+'
Low- -100='(b3) Neg_100+'
-100 - 0='(b4) Neg_0-100'
other='(b5) other'
;
Run;
proc format;
value F3Mt
Low-0,.='(a1) 0/Null/Neg'
0<-High='(a2) Pos'
;
Run;
%RRR(VAR=Wealth ,Format=F1MT )
%RRR(VAR=obligo ,Format=F2MT )
%RRR(VAR=LoansBal ,Format=F3Mt )
Data MAcro_need_to_run; infile datalines dsd; input field $ Fmt $; cards; Wealth,F1MT obligo,F2MT LoansBal,F3Mt ; Run; data _null_; set MAcro_need_to_run; call execute(catt('%RRR(Var=',field,',Format=',fmt,')')); run;
Data MAcro_need_to_run; infile datalines dsd; input field $ Fmt $; cards; Wealth,F1MT obligo,F2MT LoansBal,F3Mt ; Run; data _null_; set MAcro_need_to_run; call execute(catt('%RRR(Var=',field,',Format=',fmt,')')); run;
To prevent the macro from executing while call execute is trying to stack up the code to run later make sure to add %nrstr() macro quoting.
call execute(catt('%nrstr(%RRR)(Var=',field,',Format=',fmt,')'));
It's finally time to hack! Remember to visit the SAS Hacker's Hub regularly for news and updates.
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.
Ready to level-up your skills? Choose your own adventure.