Summary -
In this topic, we described about the SUM statement with detailed example.
A SUM statement syntax shown below -
SUM FIELDS=(field starting position, field Length, field format_type)
name | Description |
---|---|
Field1 starting position | Starting position of field1 to be compared |
Field1 Length | Length of the field1 to be compared |
Field1 format_type | Format 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:
- 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.
- From the requirement,the department is alphabetic. So the type is character (CH).
- With the above information gathered, the SORT statement like,
SORT FIELDS=(30,10,CH,A)
- 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.
- With all the data gathered, the SUM FIELDS formed like -
SUM FIELDS=(45,03,ZD)
- 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.