REXX is certain ly easy, but if the OP has large volumes of data then performance may be an isswue.
-- Shmuel (Seymour J.) Metz http://mason.gmu.edu/~smetz3 ________________________________________ From: IBM Mainframe Discussion List [IBM-MAIN@LISTSERV.UA.EDU] on behalf of Bob Bridges [robhbrid...@gmail.com] Sent: Tuesday, August 30, 2022 8:46 AM To: IBM-MAIN@LISTSERV.UA.EDU Subject: Re: Calculate deltas using DFSORT I usually keep my bigoted mouth shut in threads like this, but guys, why DFSORT? That's great for the simple stuff, but REXX is so much easier and you don't have to sweat over more and more and yet more inventive solutions. --- Bob Bridges, robhbrid...@gmail.com, cell 336 382-7313 /* It is a settled policy of America, that as peace is better than war, war is better than tribute. The United States, while they wish for war with no nation, will buy peace with none. -James Madison, upon the conclusion of a US war against Barbary piracy (in the person of the Dey of Algiers, Omar Pasha) in 1815 */ -----Original Message----- From: IBM Mainframe Discussion List <IBM-MAIN@LISTSERV.UA.EDU> On Behalf Of Massimo Biancucci Sent: Tuesday, August 30, 2022 07:09 I first tried with WHEN=GROUP but with no success. After that I hopefully succeeded with a JOIN. The main idea is to extract keys from file and number those simply by sequential number. So the STAMPA "view" at ST010 should show something like this: SUGAR100 000001 SUGAR97 000002 SUGAR93 000003 XXXXX20 000004 YYYYY150 000005 YYYYY140 000006 then try to JOIN every key with the relative (+1) of the original file. So SUGAR-000002 of the original file must match with SUGAR-000001 of the keys subset. This has been done with the JNF2CNTL ADD statement. The final sample output is: ----+----1----+----2----+----3----+----4----+----5----+----6----+----7----+----8----+----9----+----0----+----1----+----2 SUGAR,2022/08/01,100 000001 1 000000 SUGAR,2022/08/02,97 000002SUGAR100 000002B 000003 SUGAR,2022/08/03,93 000003SUGAR97 000003B 000004 XXXXX,2022/08/03,20 000004SUGAR93 000004B 000000 YYYYY,2022/08/01,150 000005XXXXX20 000005B 000000 YYYYY,2022/08/01,140 000006YYYYY150 000006B 000010 where first piece (1-56) is the original record, the second piece (57-80) is the trace of the JOIN process and last column (81:86) is the result you need. Double check if the idea is effective. //*-------------------------------------------------------------------* //* EXTRACT KEYS AND SEQNUM FROM ORIGINAL FILE * //* FILE SHOULD BE ORDERED BY PRODUCT AND DATE. * //*-------------------------------------------------------------------* //ST010 EXEC PGM=SORT //SYSOUT DD SYSOUT=* //SORTOUT DD DSN=&F2,DISP=(,PASS),SPACE=(TRK,(1,1),RLSE) //STAMPA DD SYSOUT=* //SORTIN DD * SUGAR,2022/08/01,100 SUGAR,2022/08/02,97 SUGAR,2022/08/03,93 XXXXX,2022/08/03,20 YYYYY,2022/08/01,150 YYYYY,2022/08/01,140 /* //SYSIN DD * SORT FIELDS=(1,5,A,7,10,A),FORMAT=BI OUTFIL FNAMES=SORTOUT, OUTREC=(1,5,18,10,SEQNUM,6,ZD) OUTFIL FNAMES=STAMPA, OUTREC=(1,5,18,10,SEQNUM,6,ZD) /* //*-------------------------------------------------------------------* //* JOIN WITH ORIGINAL FILE ON SEQNUM + 1 * //*-------------------------------------------------------------------* //ST020 EXEC PGM=SORT //SYSOUT DD SYSOUT=* //SORTOUT DD SYSOUT=* //F1 DD * SUGAR,2022/08/01,100 SUGAR,2022/08/02,97 SUGAR,2022/08/03,93 XXXXX,2022/08/03,20 YYYYY,2022/08/01,150 YYYYY,2022/08/01,140 /* //JNF1CNTL DD * INREC FIELDS=(1,50,SEQNUM,6,ZD) /* //F2 DD DSN=&F2,DISP=(OLD,DELETE) //JNF2CNTL DD * INREC FIELDS=(1,15,16,6,ZD,ADD,+1,TO=ZD,LENGTH=6) /* //SYSIN DD * JOINKEYS F1=F1,FIELDS=(51,6,A) JOINKEYS F2=F2,FIELDS=(16,6,A) JOIN UNPAIRED,F1 REFORMAT FIELDS=(F1:1,56,F2:1,21,?) SORT FIELDS=COPY OUTFIL FNAMES=SORTOUT,REMOVECC, IFTHEN=(WHEN=(1,5,CH,EQ,56,5,CH), OVERLAY=(81:61,10,UFF,SUB,18,10,UFF,EDIT=(TTTTTT))), IFTHEN=(WHEN=NONE, OVERLAY=(81:C'000000')) --- Il giorno mar 30 ago 2022 alle ore 09:32 Mario Bezzi < subscriptions.mario.be...@gmail.com> ha scritto: > say I have a file with goods, dates, and available quantities, not > necessarily sorted. I want to sort it and calculate daily deltas. > > For example using the following input : > > Product,Date,Availability > Sugar,2022/08/01,100 > Sugar,2022/08/02,97 > Sugar,2022/08/03,93 > > I need to get to this: > > Product,Date,Sold > Sugar,2022/08/01,N/A (No daily delta for the first record) > Sugar,2022/08/02,3 (100 - 97) > Sugar,2022/08/03,4 (97 - 93) > > May I use bultin DFSORT functions to calculate deltas from the > previous record and the current one? > > I had a look at the OUTREC statement in the Application Programming > Manual, but as far as I can see arithmetic expressions can only use > input fields from the current record or decimal constants. > > It believe I can achieve the above result using an E35 exit, just > wanted to be sure that's the only way. ---------------------------------------------------------------------- For IBM-MAIN subscribe / signoff / archive access instructions, send email to lists...@listserv.ua.edu with the message: INFO IBM-MAIN ---------------------------------------------------------------------- For IBM-MAIN subscribe / signoff / archive access instructions, send email to lists...@listserv.ua.edu with the message: INFO IBM-MAIN