Is this what you want to do? Why are you adding three leading spaces inside the quotes of the macro variable P_YEAR? I added a THIS_QTR variable so that you can check if the LAST_QTR variable is getting set the way you want. %let Date = 31OCT2011 ; %let Year_mm = 201110; %let B_mm = 01OCT2011; data _null_ ; call symput( 'P_Date' , "'"||put( "&Date"d , yymmddd10. )||"'" ) ; call symput( 'P_Year' , "' &year_mm'"); call symput( 'P_B_mm' , "'&B_mm'" ) ; run ; %put p_date=&p_date p_year=&p_year p_b_mm=&p_b_mm; data dats5; given_date = "&B_mm"d ; given_month= month(given_date) ; given_day = day(given_date) ; given_year = year(given_date) ; next_Month = intnx('month',given_date,1,'b'); this_Qtr = intnx('qtr',given_date,0, 'b'); last_Qtr = intnx('qtr',given_date,-1, 'b'); last_yr = intnx('year',given_date,-1,'s'); array prev_yr[7]; do i=1 to dim(prev_yr); prev_yr(i)= intnx('year',given_date,-i,'s'); call symputx( cats('DY',i) , put(prev_yr(i),date9.)) ; end; format _numeric_ date9. given_month given_day z2. given_year i ; put (_all_) (=/); run; Here are the output of the %PUT and PUT statements. p_date='2011-10-31' p_year=' 201110' p_b_mm='01OCT2011' given_date=01OCT2011 given_month=10 given_day=01 given_year=2011 next_Month=01NOV2011 this_Qtr=01OCT2011 last_Qtr=01JUL2011 last_yr=01OCT2010 prev_yr1=01OCT2010 prev_yr2=01OCT2009 prev_yr3=01OCT2008 prev_yr4=01OCT2007 prev_yr5=01OCT2006 prev_yr6=01OCT2005 prev_yr7=01OCT2004 i=8
... View more