Creating Statistics in Reports Example


Scenario - Create the report with min, max, avg marks statistics for each department.

Input File - MATEPK.SORT.INPUT01 - FB file of 80 length

----+----1----+----2----+----3----+----4----+----5----+----6----+----7----+----8
00001     student1           dept1          560
00003     student3           dept2          520
00004     student4           dept1          540
00005     student5           dept2          500
00002     student2           dept3          510
00006     student6           dept3          550
00008     student8           dept1          530
00007     student7           dept3          510
00009     student9           dept2          520
00010     student10          dept2          505

JCL -

----+----1----+----2----+----3----+----4----+----5----+----6----+----7--
//MATEPKD  JOB (123),'MTH',NOTIFY=&SYSUID
//*
//STEP01   EXEC PGM=SORT
//SORTIN   DD DSN=MATEPK.SORT.INPUT01,DISP=SHR
//OUTPUT1  DD DSN=MATEPK.SORT.OUTPT01,
//             SPACE=(CYL,(1,1),RLSE),DCB=*.SORTIN, 
//             DISP=(NEW,CATLG,DELETE)
//SYSOUT   DD SYSOUT=*
//SYSIN    DD *
     SORT FIELDS=(30,5,CH,A)
     OUTFIL FNAMES=OUTPUT1,

     SECTIONS=(30,5,SKIP=P,

     HEADER3=(3:X,/,
        3:'Department: ',30,5,/,X,/,
        1:'Std num',11:'Std name',30:'Department',45:'Total marks',/, 
        1:'-------',11:'--------',30:'----------',45:'-----------'),  

     TRAILER3=(2/,5:'Max  Marks    = ',MAX=(45,3,ZD,M12,LENGTH=10),/,   
        5:'Min  Marks    = ',MIN=(45,3,ZD,M12,LENGTH=10),/,
        5:'Avg  Marks    = ',AVG=(45,3,ZD,M12,LENGTH=10))),
     OUTREC=(1,80)

/*

Output File - MATEPK.SORT.OUTPT01 - FB file of 80 length

----+----1----+----2----+----3----+----4----+----5----+----6----+----7----+----8

  Department: dept1

Std num   Std name           Department     Total marks
-------   --------           ----------     ----------- 
00001     student1           dept1          560
00004     student4           dept1          540
00008     student8           dept1          530

    Max  Marks    =        560
    Min  Marks    =        530
    Avg  Marks    =        543

  Department: dept2

Std num   Std name           Department     Total marks
-------   --------           ----------     -----------
00003     student3           dept2          520
00005     student5           dept2          500
00009     student9           dept2          520
00010     student10          dept2          505

    Max  Marks    =        520
    Min  Marks    =        500
    Avg  Marks    =        511

  Department: dept3

Std num   Std name           Department     Total marks
-------   --------           ----------     -----------
00002     student2           dept3          510
00006     student6           dept3          550
00007     student7           dept3          510
 
    Max  Marks    =        550
    Min  Marks    =        510
    Avg  Marks    =        523

Explaining Example -

  1. SORT FIELDS=(1,5,ZD,A) - sort all outputs in ascending order based on the ZD value from 1 to 5 positions.
  2. OUTFIL FNAMES=OUTPUT1,.. - Writes the output to the output1 file.
  3. SECTIONS=(30,5,SKIP=P, - specifies the section selection criteria. In the above example, the selection criteria is Dept. So given Dept positions.
  4. HEADER3=(3:X,/, 3:'Department: ',30,5,/,X,/,1:'Std num',11:'Std name',30:'Department',45:'Total marks',/,1:'-------',11:'--------',30:'----------',45:'-----------'), - Creates section level header.
  5. TRAILER3=(..) - Creates section level trailer.
  6. TRAILER3=(2/,..) - Adds two empty lines to output file after the data copied from input file.
  7. TRAILER3=(..,5:'Max Marks = ',MAX=(45,3,ZD,M12,LENGTH=10),/,..) - Calculates MAX marks from the Marks from 45th position of length 3 and displays the maximum value from 5th position in the output file.
  8. TRAILER3=(..,/,..) - moves the control to the next line.
  9. TRAILER3=(..,5:'Min Marks = ',MIN=(45,3,ZD,M12,LENGTH=10),/,..) - Calculates MIN marks from the Marks from 45th position of length 3 and displays the maximum value from 5th position in the output file.
  10. TRAILER3=(..,/,..) - moves the control to the next line.
  11. TRAILER3=(..,5:'Avg Marks = ',AVG=(45,3,ZD,M12,LENGTH=10)) - Calculates AVG marks from the Marks from 45th position of length 3 and displays the maximum value from 5th position in the output file.
  12. OUTREC=(1,80) - Build the output record from input file of length 80.