BookmarkSubscribeRSS Feed
☑ This topic is solved. Need further help from the community? Please sign in and ask a new question.
DougHold
Obsidian | Level 7

I would like a macro variable that is referenced to change -1 and +1 with each iteration. For example in the following loop, each iteration from the start year of 2011 to the end year of 2013 should give the year minus 1 (YM1), the year (Y), and the year plus 1 (YP1).

 

 

%macro Loop_year(startyear=, endyear=);
   %DO I = &startyear %TO &endyear;
      %put YM1 is &I-1;   
	  %put Y   is &I;
	  %put YP1 is &I+1;
   %end;
%mend Loop_year;

%Loop_year(startyear=2011, endyear=2013);

This is what I get:

 

YM1 is 2011-1
Y is 2011
YP1 is 2011+1
YM1 is 2012-1
Y is 2012
YP1 is 2012+1
YM1 is 2013-1
Y is 2013
YP1 is 2013+1

 

But this is what I want:

YM1 is 2010
Y is 2011
YP1 is 2012
YM1 is 2011
Y is 2012
YP1 is 2013
YM1 is 2012
Y is 2013
YP1 is 2014

 

Would this be possible? Thanks in advance

1 ACCEPTED SOLUTION

Accepted Solutions
PeterClemmensen
Tourmaline | Level 20

Like this?

 

%macro Loop_year(startyear=, endyear=);
   %DO I = &startyear %TO &endyear;
      %put YM1 is %eval(&I-1);   
	   %put Y   is &I;
	   %put YP1 is %eval(&I+1);
   %end;
%mend Loop_year;

%Loop_year(startyear=2011, endyear=2013);

 

Result:

 

YM1 is 2010
Y   is 2011
YP1 is 2012
YM1 is 2011
Y   is 2012
YP1 is 2013
YM1 is 2012
Y   is 2013
YP1 is 2014

View solution in original post

2 REPLIES 2
PeterClemmensen
Tourmaline | Level 20

Like this?

 

%macro Loop_year(startyear=, endyear=);
   %DO I = &startyear %TO &endyear;
      %put YM1 is %eval(&I-1);   
	   %put Y   is &I;
	   %put YP1 is %eval(&I+1);
   %end;
%mend Loop_year;

%Loop_year(startyear=2011, endyear=2013);

 

Result:

 

YM1 is 2010
Y   is 2011
YP1 is 2012
YM1 is 2011
Y   is 2012
YP1 is 2013
YM1 is 2012
Y   is 2013
YP1 is 2014
DougHold
Obsidian | Level 7
Exactly, thank you! The %eval() is what I was looking for.

hackathon24-white-horiz.png

2025 SAS Hackathon: There is still time!

Good news: We've extended SAS Hackathon registration until Sept. 12, so you still have time to be part of our biggest event yet – our five-year anniversary!

Register Now

How to Concatenate Values

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.

SAS Training: Just a Click Away

 Ready to level-up your skills? Choose your own adventure.

Browse our catalog!

Discussion stats
  • 2 replies
  • 949 views
  • 0 likes
  • 2 in conversation