The below codes work perfectly to generate the desired output; may I know how to use loop to generate the same output; as I might have 30 months instead of 8 months. Anyone can help? Thanks. %LET RUNDATE = "01APR2018"D; DATA _NULL_; IF MONTH(&RUNDATE) GE 4 AND MONTH(&RUNDATE) LE 12 THEN DO; CALL SYMPUT("MONTH1",PUT(INTNX('MONTH',&RUNDATE,-(MONTH(&RUNDATE))+4),YYMMN6.)); CALL SYMPUT("MONTH2",PUT(INTNX('MONTH',&RUNDATE,-(MONTH(&RUNDATE))+5),YYMMN6.)); CALL SYMPUT("MONTH3",PUT(INTNX('MONTH',&RUNDATE,-(MONTH(&RUNDATE))+6),YYMMN6.)); CALL SYMPUT("MONTH4",PUT(INTNX('MONTH',&RUNDATE,-(MONTH(&RUNDATE))+7),YYMMN6.)); CALL SYMPUT("MONTH5",PUT(INTNX('MONTH',&RUNDATE,-(MONTH(&RUNDATE))+8),YYMMN6.)); CALL SYMPUT("MONTH6",PUT(INTNX('MONTH',&RUNDATE,-(MONTH(&RUNDATE))+9),YYMMN6.)); CALL SYMPUT("MONTH7",PUT(INTNX('MONTH',&RUNDATE,-(MONTH(&RUNDATE))+10),YYMMN6.)); CALL SYMPUT("MONTH8",PUT(INTNX('MONTH',&RUNDATE,-(MONTH(&RUNDATE))+11),YYMMN6.)); END; IF MONTH(&RUNDATE) GE 1 AND MONTH(&RUNDATE) LE 3 THEN DO; CALL SYMPUT("MONTH1",PUT(INTNX('MONTH',&RUNDATE,-(MONTH(&RUNDATE))-4),YYMMN6.)); CALL SYMPUT("MONTH2",PUT(INTNX('MONTH',&RUNDATE,-(MONTH(&RUNDATE))-3),YYMMN6.)); CALL SYMPUT("MONTH3",PUT(INTNX('MONTH',&RUNDATE,-(MONTH(&RUNDATE))-2),YYMMN6.)); CALL SYMPUT("MONTH4",PUT(INTNX('MONTH',&RUNDATE,-(MONTH(&RUNDATE))-1),YYMMN6.)); CALL SYMPUT("MONTH5",PUT(INTNX('MONTH',&RUNDATE,-(MONTH(&RUNDATE))-0),YYMMN6.)); CALL SYMPUT("MONTH6",PUT(INTNX('MONTH',&RUNDATE,-(MONTH(&RUNDATE))+1),YYMMN6.)); CALL SYMPUT("MONTH7",PUT(INTNX('MONTH',&RUNDATE,-(MONTH(&RUNDATE))+2),YYMMN6.)); CALL SYMPUT("MONTH8",PUT(INTNX('MONTH',&RUNDATE,-(MONTH(&RUNDATE))+3),YYMMN6.)); END; RUN; %PUT MONTH1 = &MONTH1; %PUT MONTH2 = &MONTH2; %PUT MONTH3 = &MONTH3; %PUT MONTH4 = &MONTH4; %PUT MONTH5 = &MONTH5; %PUT MONTH6 = &MONTH6; %PUT MONTH7 = &MONTH7; %PUT MONTH8 = &MONTH8;
... View more