Hi, I have the below code written. Macro bus_str_m1 and current_ui_m1 resolves to '31-Jun-2014' when dd = 31July2014. However '31-Jun-2014' is an invalid date, I would like it to be '30-Jun-2014'. How would I re-write the code if I want the variables work the same on all other days except for month end or invalid dates? Is there a way SAS can automatically check for invalid dates? data _null_; CALL SYMPUT('yyyymmdd', put(today(), yymmddn8.) ); CALL SYMPUT('yyyymm', put(today(), yymmn6.) ); run; data _null_; dd = day(today()); MONTH_STR_M1 = intnx('month',input(put(&yyyymm, 6.), yymmn6.), 0); MONTH_END_M1 = intnx('month',input(put(&yyyymm, 6.), yymmn6.), 1); MONTH_END_P1 = intnx('month',input(put(&yyyymm, 6.), yymmn6.), -1); MONTH_CURR_UI = intnx('month',input(put(&yyyymm, 6.), yymmn6.), -13); CALL SYMPUT('bur_str_m1', "'"||put(dd,z2.)||"-"||PUT(MONTH_END_P1, monname3.)||"-"||put(MONTH_STR_M1,year4.)||"'"); CALL SYMPUT('bur_end_m1', "'"||put(dd,z2.)||"-"||PUT(MONTH_STR_M1, MONNAME3.)||"-"||PUT(MONTH_END_M1,YEAR4.)||"'"); CALL SYMPUT('current_ui_m1', "'"||put(dd,z2.)||"-"||PUT(MONTH_CURR_UI, MONNAME3.)||"-"||PUT(MONTH_CURR_UI,YEAR4.)||"'"); CALL SYMPUT('pre_yyyymm', PUT(MONTH_END_P1,yymmn6.)); run; %put &bur_str_m1 &bur_end_m1 ¤t_ui_m1 &pre_yyyymm; '31-Jun-2014' '31-Jul-2014' '31-Jun-2013' 201406 Thanks, Santosh
... View more