data _null_;
call symputx('td','01May2017'd);
call symputx('td1','03May2017'd);
call symputx('td2','15May2017'd);
call symputx('td3','10May2017'd);
run;
%put &td. &td1. &td2.;
%macro test;
%if &td1. <= &td. <= &td2. %then %do;
proc print data=sashelp.air;
run;
%end;
%else %do;
proc print data=sashelp.cars; run;
%end;
%mend test;
%test;
In this example, td is not between td1 and td2. Sashelp.air is printed as output. What is the explanation for this?
Thank you.
A set of comparisons works differently in macro language:
%if &td1. <= &td. <= &td2. %then %do;
In macro language, these function as if you had added parentheses:
%if (&td1. <= &td.) <= &td2. %then %do;
The first comparison returns a 1 (if true) or a 0 (if false). You need to spell them out separately:
%if &td1. <= &td. and &td. <= &td2. %then %do;
A set of comparisons works differently in macro language:
%if &td1. <= &td. <= &td2. %then %do;
In macro language, these function as if you had added parentheses:
%if (&td1. <= &td.) <= &td2. %then %do;
The first comparison returns a 1 (if true) or a 0 (if false). You need to spell them out separately:
%if &td1. <= &td. and &td. <= &td2. %then %do;
Registration is now open for SAS Innovate 2025 , our biggest and most exciting global event of the year! Join us in Orlando, FL, May 6-9.
Sign up by Dec. 31 to get the 2024 rate of just $495.
Register now!
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.