DATA Step, Macro, Functions and more

Incorrect macro logic

Accepted Solution Solved
Reply
Contributor
Posts: 24
Accepted Solution

Incorrect macro logic

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?


Accepted Solutions
Solution
‎07-15-2014 12:04 PM
Super User
Posts: 17,829

Re: Incorrect macro logic

THIS <= &i <=  does not work as expected in macro language.

Change it to

%if  2000 <= &i  AND &i  <= 2011 or some variation thereof.

View solution in original post


All Replies
Solution
‎07-15-2014 12:04 PM
Super User
Posts: 17,829

Re: Incorrect macro logic

THIS <= &i <=  does not work as expected in macro language.

Change it to

%if  2000 <= &i  AND &i  <= 2011 or some variation thereof.

☑ This topic is SOLVED.

Need further help from the community? Please ask a new question.

Discussion stats
  • 1 reply
  • 182 views
  • 0 likes
  • 2 in conversation