I have a macro that is looping through datafiles from different years for a proc mean. I want it to run with a different var statement depending on which year it is currently looping through. At the moment, my code looks like this:
%macro varcheck;
%do i = &yrmin %to &yrmax;
%let yr = %substr(&i.,3,2);
proc means n mean median max data=&lib..&stem.&yr.;
%if 2000 <= &i <= 2011 %then
vars variables;
%else %if 2012 <= &i <= 2013 %then
vars other variables;
;
run;
%end;
%mend varcheck;
%varcheck;
When I run the code, however, the program returns the following on years 2012 and 2013:
SYMBOLGEN: Macro variable I resolves to 2012
MLOGIC(VARCHECK): %IF condition 2000 <= &i <= 2011 is TRUE
It works if I replace the if conditions with &i = 2000 or &i = 2001 etc., but that can get pretty cumbersome. Is there a way to get this to resolve correctly, or am I stuck with the clunky way?
THIS <= &i <= does not work as expected in macro language.
Change it to
%if 2000 <= &i AND &i <= 2011 or some variation thereof.
THIS <= &i <= does not work as expected in macro language.
Change it to
%if 2000 <= &i AND &i <= 2011 or some variation thereof.
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 lock in 2025 pricing—just $495!
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.