DFSORT SUM statement

DFSORT Summing records DFSORT SUM: Suppressing with duplicate

Advertisements


A SUM statement syntax shown below:


Syntax:

SUM FIELDS=(field starting position, field Length, field format_type)

Let’s discuss in detail.


nameDescription
Field1 starting positionStarting position of field1 to be compared
Field1 LengthLength of the field1 to be compared
Field1 format_typeFormat of the field1 like CH, PD, BI etc,.

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=(45,03,ZD)                                             
003400 /*                                                                      
****** **************************** Bottom of Data ****************************	

Output:

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

Explaining Solution:

  1. As a first step, need to get the position of departmentto add it in SORT condition.So the STD-DEPT starting position is 30 and length is 10.
  2. From the requirement,the department is alphabetic. So the type is character (CH).
  3. With the above information gathered, the SORT statement like,

  4. SORT FIELDS=(30,10,CH,A)

  5. As per requirement, department level marks needs to sum. So the STD-MARKS position, length, format required for SUM FIELDS. STD-MARKS start from 45th position of length 3 and type is numeric as per declaration. So use ZD.
  6. With all the data gathered, the SUM FIELDS formed like

  7. SUM  FIELDS=(45,03,ZD)

  8. The output would have the first records of duplicates with the sum of marks at the STD-MARKS position and unique records with original marks from input.

DFSORT Summing records DFSORT SUM: Suppressing with duplicate

Advertisements