July 21, 2020, 08:32 AM
jltz83od [CLOSED] Result of DATEADD in -SET
We want to use a simple loop to create datasets based on date parameters. When using DATEADD in a -SET statement, the result appears to be a serial date value. Any suggestions on how to return the value formatted 'like' YYMD in our initial -SET statements?
-SET &START = 20180701;
-SET &END = 20190630;
-SET &START_FY = '2018/07/01';
-SET &END_FY = '2019/06/30';
-TYPE &START
-TYPE &END
-TYPE &START_FY
-TYPE &END_FY
-REPEAT LOOP FOR &I FROM 0 TO 1;
-SET &START = &START + 10000;
-SET &END = &END + 10000;
-SET &START_FY = DATEADD(&START_FY,'Y',1);
-SET &END_FY = DATEADD(&END_FY,'Y',1);
-TYPE &START
-TYPE &END
-TYPE &START_FY
-TYPE &END_FY
-LOOP
This message has been edited. Last edited by: jltz83od , July 21, 2020 11:39 PM July 21, 2020, 09:40 AM
jfr99 Try using the DATECVT function … Run this loop and see if that helps you out.
-SET &CURR_YYMD = &YYMD;
-REPEAT LOOP FOR &I FROM 0 TO 9;
-SET &LOOP_YYMD = DATECVT((DATEADD((DATECVT (&CURR_YYMD, 'I8YYMD', 'YYMD')),'Y', &I)), 'YYMD','I8YYMD');
-SET &LOOP_FY = EDIT(DATECVT(&LOOP_YYMD,'I8YYMD','A8YYMD'),'9999/99/99');
-TYPE CURR_YYMD = &CURR_YYMD ~ I = &I ~ LOOP_YYMD = &LOOP_YYMD ~ LOOP_FY = &LOOP_FY
-LOOP
July 21, 2020, 02:01 PM
MartinY Another solution could be :
-SET &START_FY = '2018/07/01';
-SET &END_FY = '2019/06/30';
-REPEAT LOOP FOR &I FROM 1 TO 3
-SET &START_FY = DATETRAN(DTADD('&START_FY.EVAL', YEAR, 1), '(YYMD)', '(/)', 'EN', 10, 'A10');
-SET &END_FY = DATETRAN(DTADD('&END_FY.EVAL', YEAR, 1), '(YYMD)', '(/)', 'EN', 10, 'A10');
-TYPE &START_FY
-TYPE &END_FY
-LOOP July 21, 2020, 11:38 PM
jltz83od Both great solutions. Thank you!