DFSORT doesn’t have a built-in function for Convert Date – interpreting the month field of date in DDMMMYY formats as numeric values but you can use INREC and OUTREC statements to translate the month back and forth. Let’s take an example assuming that the DDMMMYY date is in positions 1-7.
BUILD=(3,3, 3,3, CHANGE=(2,C'Jan',C'01',C'Feb',C'02',C'Mar',C'03',C'Apr', C'04',C'May',C'05',C'Jun',C'06',C'Jul',C'07',C'Aug',C'08', C'Sep',C'09',C'Oct',C'10',C'Nov',C'11',C'Dec',C'12'), 1,2, —> DD 6,2, —> YY 8,73) —> 73 is length to end of record SORT FIELDS=(4,6,Y2W,D) —> Sort MMDDYY using Century Window OUTREC BUILD=(6,2, —> DD 1,3, —> MON 8,2, —> YY 10,73) —> Rest of record
You use p, m,CHANGE=(v,find,set,…) to give the position and length of the input field, the length of the output field, and the “table” consisting of pairs of find constants, and set constants or set fields. The result of CHANGE is
Jan | 01 Feb | 02 Mar | 03 Apr | 04 May | 05 Jun | 06 Jul | 07 Aug | 08 Sep | 09 Oct | 10 Nov | 11 Dec | 12
Example of Convert Date – DDMMMYY to MM/DD/YY Format
Concert input record’s date format from DD-MMM-YY (01-JAN-21) to MM/DD/YYYY (01/01/2021) using IFTHEN
//STEP0100 EXEC PGM=SORT //SYSOUT DD SYSOUT=* //SORTIN DD * ----+----1----+----2----+----3----+----4----+----5 XXXXXXXXXXXXXXXXX~01-JAN-21~XXXXXXXXXXX //SORTOUT DD SYSOUT=* //SYSIN DD * OPTION COPY,Y2PAST=1980 INREC IFOUTLEN=80,IFTHEN=(WHEN=INIT, OVERLAY=(81:22,3,19,2,26,2)), IFTHEN=(WHEN=INIT,FINDREP=(STARTPOS=81, INOUT=(C'JAN',C'01',C'FEB',C'02',C'MAR',C'03',C'APR', C'04',C'MAY',C'05',C'JUN',C'06',C'JUL',C'07',C'AUG', C'08',C'SEP',C'09',C'OCT',C'10',C'NOV',C'11',C'DEC', C'12'))), IFTHEN=(WHEN=INIT,OVERLAY=(40:81,6,Y2W(/))) //*
Output: XXXXXXXXXXXXXXXXX~01-JAN-21~XXXXXXXXXXX01/01/21