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,')'));
April 27 – 30 | Gaylord Texan | Grapevine, Texas
Walk in ready to learn. Walk out ready to deliver. This is the data and AI conference you can't afford to miss.
Register now and save with the early bird rate—just $795!
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.