DFSORT SUM Suppressing duplicate records

SUM statement DFSORT SUM: Handling overflow - VLSHRT

Advertisements


Apart from summing values, SUM used to delete records with duplicate control fields/ "duplicate records".


Syntax:


SUM FIELDS=NONE

Let’s discuss in detail.

nameDescription
NONE Specifies to SORT that no duplicates in output

Example:

From the below data, sum the marks at department level.


Input:- MTH.SORT.INPUT

----+----1----+----2----+----3----+----4----+----5----+----6----+----7----+----8
********************************* Top of Data **********************************
00001     student1            dept1          095                                 
00003     student3            dept2          070                                 
00004     student4            dept1          090                                 
00005     student5            dept2          083                                 
00002     student2            dept3          088                                 
******************************** Bottom of Data ********************************

Input Record Layout:

01 INPUT-REC.
	05 STD-ID			PIC X(05).
	05 FILLER			PIC X(05).
	05 STD-NAME			PIC X(15).
	05 FILLER			PIC X(05).
	05 STD-DEPT			PIC X(10).
	05 FILLER			PIC X(05).
	05 STD-MARKS		PIC 9(03).
	05 FILLER			PIC X(32).

Job:

000100 //Jobcard
000400 //*                                                                     
000500 //**********************************************************************
000600 //*                                                                     
000700 //* SORT SUM STATEMENT                                                  
000800 //*                                                                     
000900 //**********************************************************************
001100 //STEP01   EXEC PGM=SORT                                                
001300 //SORTIN   DD DSN=MTH.SORT.INPUT01,DISP=SHR                    
001800 //SORTOUT  DD SYSOUT=*                                                  
001900 //SYSOUT   DD SYSOUT=*                                                  
002400 //SYSIN    DD *                                                         
002412      SORT FIELDS=(30,10,CH,A)                                           
002420      SUM  FIELDS=NONE
003400 /*                                                                      
****** **************************** Bottom of Data ****************************

Output:

----+----1----+----2----+----3----+----4----+----5----+----6----+----7----+----8
********************************* TOP OF DATA **********************************
00001     student1           dept1          095                                 
00003     student3           dept2          070                                 
00002     student2           dept3          088                                 
******************************** BOTTOM OF DATA ********************************

Explaining Solution:

  1. As per requirement, department level duplicates needs to be eliminated. So the STD-DEPT position, length, format required for SORT FIELDS. STD-MARKS start from 30th position of length 10 and type is alphanumeric as per declaration. So use CH.
  2. The SORT condition for the above requirement with all the data gathered is
  3. SORT FIELDS=(30,10,CH,A)
  4. The above sort condition specifies all the duplicates should be dropped with the department as key.
  5. The output would have the first records of duplicates and non-duplicate records.

SUM statement DFSORT SUM: Handling overflow - VLSHRT

Advertisements