DFSORT Summing records

DFSORT OMIT: Allowable comparisons DFSORT SUM statement


The SUM control statement used to specify one or more numeric fields that are to be summed whenever records have equally ordering control fields.

The control fields are specified on the SORT statement.

The data formats allowed to specify on the SUM statement are below.

  1. binary (BI)
  2. fixed-point (FI)
  3. packed decimal (PD)
  4. zoned decimal (ZD)
  5. floating-point (FL)

Only control fields from control statements (from SORT statement) are allowed while using the summary fields.

The groups of same control field contents of the summary fields are summed.

The groups of same control field are often called "duplicate" records.


From the below data, SUM the marks of duplicates at department level from the file.


********************************* 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:

  	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).


000100 //Jobcard 
000400 //*                                                                     
000500 //**********************************************************************
000600 //*                                                                     
000700 //* SORT SUM STATEMENT                                                  
000800 //*                                                                     
000900 //**********************************************************************
001100 //STEP01   EXEC PGM=SORT                                                
001300 //SORTIN   DD DSN=MTHUSER.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=(45,3,ZD) 
003400 /*                                                                      
****** **************************** Bottom of Data **************************** 


********************************* TOP OF DATA **********************************
00001     student1           dept1          185                                 
00003     student3           dept2          153                                 
00002     student2           dept3          088                                 
******************************** BOTTOM OF DATA ********************************

Explaining Solution:

  1. As per requirement, department level duplicates needs to be summed up. So the STD-DEPT position, length, format required for SORT FIELDS. STD-DEPT 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 record should sort with the department as key.
  5. Below SUM condition specifies to sum the marks of duplicate recrods with the key field as EMP-DEPT

  6. SUM  FIELDS=(45,3,ZD)

  7. The output would have the first records of duplicates with the marks sum of all the records which are having same key.

DFSORT OMIT: Allowable comparisons DFSORT SUM statement