Hello,
I am trying to execute the below code but the execution stops unexpectedly. For reference, the min_date is 15Feb1993 and the max_date is 15Dec2013. At the bottom of the macro I have also pasted macro variable resolution from the log. Any help is greatly appreciated. Thanks
%macro run_all;
proc sql noprint;
select max(datepart(current_date)) format=date9., min(datepart(current_date)) format=date9.
into :max_date, :min_date
from edf;
quit;
%do %until ("&min_date."d ge "&max_date."d);
%let var_2= %sysfunc(inputn(&min_date,date9.),monyy5.);
%cohort(&min_date,&var_2);
%let min_date=%sysfunc(intnx(month,"&min_date."d,3,same),date9.);
%put &min_date.;
%end;
%mend run_all;
SYMBOLGEN: Macro variable MIN_DATE resolves to 15FEB1993
MLOGIC(RUN_ALL): %PUT &min_date.
SYMBOLGEN: Macro variable MIN_DATE resolves to 15MAY1993
15MAY1993
SYMBOLGEN: Macro variable MIN_DATE resolves to 15MAY1993
SYMBOLGEN: Macro variable MAX_DATE resolves to 15DEC2013
MLOGIC(RUN_ALL): %DO %UNTIL() condition is TRUE; loop will not iterate again.
Hello @sai_ch,
To fix the issue pointed out by Astounding, simply apply %SYSEVALF to the %UNTIL condition:
%do %until(%sysevalf("&min_date."d ge "&max_date."d));
The %SYSEVALF function helps the macro processor to understand SAS dates (and more).
Macro language does not understand SAS dates. It thinks that %DO %UNTIl is comparing two character strings. So the first time through the loop, the %UNTIL condition is true and the loop ends. because "15M is greater than "15D.
Lucky for you that it stopped. With a few changes to the dates, you might have constructed an infinite loop.
Hello @sai_ch,
To fix the issue pointed out by Astounding, simply apply %SYSEVALF to the %UNTIL condition:
%do %until(%sysevalf("&min_date."d ge "&max_date."d));
The %SYSEVALF function helps the macro processor to understand SAS dates (and more).
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!
Still thinking about your presentation idea? The submission deadline has been extended to Friday, Nov. 14, at 11:59 p.m. ET.
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.