You are on page 1of 23

SYNCSORT

Functions:
1)
2)
3)
4)
5)
6)
7)
8)

Report writing (OUTFIL)


Multiple Output (OUTFIL FILES)
Record reformatting (INREC/OUTREC)
Editing Output fields (EDITING)
Record Selection (INCLUDE/OMIT)
Sum (SUM FIELDS)
VB Records (RDW, CONVERT)
Record Arrangement (SORT, MERGE) etc

Features:
1) Syncsort uses the expanded virtual storage available under MVS OS for sorting
Activity.
2) Automatic release of SRT WRK space after execution is over & also it releases
the freespace in the secondary allocation of SORTOUT parameter.
Data Utility processing Sequence:
I/p File

Include/
Omit

Inrec

Sort

O/p File

Outrec/
Report

Sum

The Following is the list of activities that are performed by the SYNCSORT utility with
examples:-

Note: S.no. 1 14 are for Recfm = FB Records only


S.No

Member

CONCAT

COPY

EDITING

Concatenating i/p datasets (appending many i/p datasets) upto 32 i/p could be
used
Use of copy fields (similar to concat)
Making a copy of the i/p dataset
Use of editable characters (masking,converting data to a printable format)

ELIMDUPL

Eliminate duplicate records

INCLUDE

6
7
8
9

INREC

10

OUTFIL

Usage of include fields


Splitting i/p records into 2 files based on a cond
Usage of inrec fields (similar to outrec)
Usage of merge fields (similar to sort fields)
Usage of merge fields with equals & sum fields
Usage of omit fields
Omitting fields with spaces & by giving specific value
Creating multiple copies of i/p file

11

OUTREC

Usage of outrec fields (directing only required fields to output

12

REPORT

Sample report with many parameters are given here

13

SUMFIELD

14

SUMMARY

Summing numeric field by having control on a field which is repeating &


equal in value
Creating summary report

15

VARLEN

Usage of Outrec for Record format = Variable block records

MERGE
MERGEEQ
OMIT

(1) CONCAT

Description

//STEP01 EXEC PGM=SORT


//SORTIN
DD DSN=PGCN25.CONCAT.IN,
//
DISP=SHR
//
DD DSN=PGCN25.CONCAT.IN1,
//
DISP=SHR
//SORTOUT
DD DSN=PGCN25.CONCAT.OUT,
//
DISP=(NEW,CATLG,DELETE),
//
DCB=(RECFM=VB,LRECL=16,BLKSIZE=0),
//
SPACE=(CYL,(4,1),RLSE)
//SYSIN DD *
SORT FIELDS=COPY
/*
//SYSOUT DD SYSOUT=*
//SYSPRINT DD SYSOUT=*
//*END OF SORT
PGCN25.CONCAT.IN
----+----1
**********
N4 10000
C4 10000
A4 20000
L9 30000
G4 40000
**********
PGCN25.CONCAT.IN1
----+----1
**********
H2 50000
N4 60000
FP 70000
Z1 80000
G1 80000
**********
PGCN25.CONCAT.OUT
----+----1
**********
N4 10000
C4 10000
A4 20000
L9 30000
G4 40000
H2 50000
N4 60000
FP 70000
Z1 80000
G1 80000
**********

(2) COPY

* USE OF COPY FIELDS


* SORT FIELDS=COPY COPIES INPUT TO OUTPUT
//STEP01 EXEC PGM=SORT
//SORTIN
DD DSN=PGCN25.MERGE.IN,
//
DISP=SHR
//
DD DSN=PGCN25.MERGE.IN1,
//
DISP=SHR
//SORTOUT
DD DSN=PGCN25.MERGE.COPY.OUT,
//
DISP=(NEW,CATLG,DELETE),
//
DCB=(RECFM=FB,LRECL=16,BLKSIZE=0),
//
SPACE=(CYL,(4,1),RLSE)
//SYSIN DD *
* SORT FIELDS=COPY
MERGE FIELDS=COPY
/*
//SYSOUT DD SYSOUT=*
//SYSPRINT DD SYSOUT=*
//*END OF SORT
//*
PGCN25.MERGE.IN
----+----1
**********
A4 20000
C4 10000
G4 40000
L9 30000
N4 10000
**********
PGCN25.MERGE.IN1
----+----1
**********
A4 80000
G4 80000
H2 50000
L9 70000
N4 60000
**********
PGCN25.MERGE.COPY.OUT
----+----1
**********
A4 20000
C4 10000
G4 40000
L9 30000
N4 10000
A4 80000
G4 80000
H2 50000
L9 70000
N4 60000
**********
(3) EDITING

//********************************************************************
//* USAGE OF EDITABLE CHARACTERS
//* WE CAN CONVERT PACKED TO NUMERIC OR USE SIGNS SUCH AS $, CR, S ETC
//* NOTE: EDIT PARAMETER
//*
I - INSIGNIFICANT DIGIT(PROVIDES MASK WHEREVER NECESSARY)
//*
T - SIGNIFICANT DIGIT (DISPLAYS ORIGINAL VALUE WITHOUT MASK)
//*
WE CAN USE , - : / $ @ # $ ETC AS EDITABLE CHARACTERS.
//* LENGTH SUB PARM WILL OVERRIDE THE LENGTH SPECIFIED IN EDIT PARM
//*
//* SIGNS SUBPARAMETER SHOULD BE SPECIFIED IF WE USE S IN THE EDIT PARM.
//*
SIGNS=(L1,L2,L3,L4)
L(1-4) --> POSITIONAL PARAMETERS
//* L1 -> LEADING +IVE L2 -> LEADING -IVE
//* L3 -> TRAILING +IVE L4 -> TRAILING -IVE
//* L2 OR L4 ARE WIDELY USED
//* WE CAN OVERRIDE SIGNS BY SIGNX...
//*********************************************************************
//STEP01 EXEC PGM=SORT
//SORTIN DD DSN=PGCN25.EDIT.IN,DISP=SHR
//SORTOUT DD DSN=PGCN25.EDIT.OUT,
//
DISP=(,CATLG,DELETE),
//
SPACE=(CYL,(1,1),RLSE)
//*
DCB=(RECFM=FBA,LRECL=30,BLKSIZE=0)
//SYSIN DD *
SORT FIELDS=(1,1,CH,A)
OUTFIL OUTREC=(1:1,1,3:2,8,ZD,EDIT=(TT/TT/TTTT),
14:10,5,ZD,EDIT=(II,IIT),LENGTH=6,
21:15,4,PD,EDIT=($II,IIT.TT),
32:19,4,PD,EDIT=(S$II,IIT.TT),SIGNS=(,-,,))
/*
//SYSOUT DD SYSOUT=*
//SYSUDUMP DD SYSOUT=*
PGCN25.EDIT.IN
----+----1----+----2-**********************
A0629200114400. ... ..
D0630200112020........
C0628200111000........
B0627200115000...*...*
**********************
PGCN25.EDIT.OUT
----+----1----+----2----+----3----+----4-********************************* Top of D
A 06/29/2001 14,400 $14,400.50 $14,400.50
B 06/27/2001 15,000 $15,000.75 $15,000.75
C 06/28/2001 11,000 $11,000.50 -$11,000.50
D 06/30/2001 12,020 $12,020.50 -$12,020.50
******************************** Bottom of

(4) ELIMDUPL
*THIS JCL WILL DELETE DUPLICATE RECORDS.

*
*USE SORT FIELDS & SUM FIELDS=NONE TO ELIMINATE DUPLICATE RECORDS
*NOTE: SORT KEY SHOULD INCLUDE THE WHOLE RECORD LENGTH
*
SORT FIELDS=COPY WILL NOT WORK
//STEP01 EXEC PGM=SORT
//SORTIN
DD DSN=PGCN25.ELIMDUPL.IN,
//
DISP=SHR
//SORTOUT
DD DSN=PGCN25.ELIMDUPL.OUT,
//
DISP=(NEW,CATLG,DELETE),
//
DCB=(RECFM=VB,LRECL=16,BLKSIZE=0),
//
SPACE=(CYL,(4,1),RLSE)
//SYSIN DD *
* SORT FIELDS SPECIFIED HERE TO SORT THE RECORDS
SORT FIELDS=(1,9,BI,A)
* SUM FIELDS SPECIFIED HERE IS TO ELIMINATE DUPLICATE RECORDS
SUM FIELDS=NONE
* END REPLACES /* TO END THE SYSIN
END
//SYSOUT DD SYSOUT=*
//SYSPRINT DD SYSOUT=*
//*END OF SORT

PGCN25.ELIMDUPL.IN
----+----1
**********
N4 10000
N4 10000
C4 10000
C4 10000
A4 20000
**********
PGCN25.ELIMDUPL.OUT
----+----1
**********
A4 20000
C4 10000
N4 10000
**********

(5) INCLUDE
********************************************************************

*
*
*
*
*
*

A FIELD CAN BE COMPARED WITH A CONSTANT OR ANOTHER FIELD


UPTO 180 COMPARISONS CAN BE MADE
'AND' EXEUTES FIRST BEFORE 'OR'
USE BRACKETS TO PRIORITISE THE SELECTION
FOR PACKED FIELDS FORMAT=PD AND DATA (SAY 11111 SHOULD BE SPECIFIED
AS P'11111' AFTER THE RELATIONAL PARAMETER

//STEP01 EXEC PGM=SORT


//SORTIN DD DSN=PGCN25.INCLUDE.IN,DISP=SHR
//SORTOUT DD DSN=PGCN25.INCLUDE.OUT,
//
DISP=(,CATLG,DELETE),
//
SPACE=(CYL,(1,1),RLSE),
//
DCB=(RECFM=FB,LRECL=30,BLKSIZE=0)
//SYSIN DD *
SORT FIELDS=(1,2,BI,D)
INCLUDE COND=(1,2,CH,EQ,C'A4',OR,19,2,ZD,GT,22,2,ZD,
OR,26,5,ZD,EQ,1000)
/*
//SYSOUT DD SYSOUT=*
//SYSUDUMP DD SYSOUT=*
PGCN25.INCLUDE.IN
----+----1----+----2----+----3
******************************
A4 20000 BOY
11 12 10000
C4 10000 APPLE
22 21 30000
FP 70000 DOG
33 34 50000
G1 80000 CAT
44 43 80000
G4 40000 FISH
55 56 40000
H2 50000 HEN
66 65 70000
L9 30000 ELEPHANT 77 78 60000
N4 10000 GUN
88 87 20000
N4 60000 INK
99 00 90000
******************************
PGCN25.INCLUDE.OUT
----+----1----+----2----+----3
******************************
N4 10000 GUN
88 87 20000
N4 60000 INK
99 00 90000
H2 50000 HEN
66 65 70000
G1 80000 CAT
44 43 80000
C4 10000 APPLE
22 21 30000
A4 20000 BOY
11 12 10000
******************************

********************************************************************

* SEPARATES INPUT RECORS INTO 2 FILES BASED ON A CERTAIN COND


//STEP02 EXEC PGM=SORT
//SORTIN DD DSN=PGCN25.INCLUDE.IN,DISP=SHR
//SORTOF1 DD DSN=PGCN25.INCLUDE.OUT1,
//
DISP=(,CATLG,DELETE),
//
SPACE=(CYL,(1,1),RLSE),
//
DCB=(RECFM=FB,LRECL=30,BLKSIZE=0)
//*
//SORTOF2 DD DSN=PGCN25.INCLUDE.OUT2,
//
DISP=(,CATLG,DELETE),
//
SPACE=(CYL,(1,1),RLSE),
//
DCB=(RECFM=FB,LRECL=30,BLKSIZE=0)
//*
//SYSIN DD *
SORT FIELDS=(1,2,BI,D)
OUTFIL FILES=(1),INCLUDE=(19,2,ZD,GT,22,2,ZD)
OUTFIL FILES=(2),INCLUDE=(19,2,ZD,LT,22,2,ZD)
/*
//SYSOUT DD SYSOUT=*
//SYSUDUMP DD SYSOUT=*
PGCN25.INCLUDE.OUT1
----+----1----+----2----+----3
******************************
N4 10000 GUN
88 87 20000
N4 60000 INK
99 00 90000
H2 50000 HEN
66 65 70000
G1 80000 CAT
44 43 80000
C4 10000 APPLE
22 21 30000
******************************
PGCN25.INCLUDE.OUT2
----+----1----+----2----+----3
******************************
L9 30000 ELEPHANT 77 78 60000
G4 40000 FISH
55 56 40000
FP 70000 DOG
33 34 50000
A4 20000 BOY
11 12 10000
******************************

(6) INREC

*********************************************************************
*SORT FIELDS = COPY CAN BE USED
*SINCE SORT FIELDS PARAMETER IS EXECUTED AFTER THE EXECUTION OF INREC
*FIELDS ...THE POSITION 1,5,ZD DENOTES THE O/P FILE
*
*NOTE: THIS JCL IS ONLY FOR FOR RECFM = FB
*INREC FIELDS IS SIMILAR TO OUTREC FIELDS BUT IT WILL BE EXECUTED
*BEFORE SORT,SUM OR OUTREC STMT. THUS IT IMPROVES I/O PERFORMANCE
*IF YOU ARE SORTING A LARGE VOLUME OF RECORDS.
*********************************************************************
//STEP01 EXEC PGM=SORT
//SORTIN DD DSN=PGCN25.INREC.IN,DISP=SHR
//SORTOUT DD DSN=PGCN25.INREC.OUT,
//
DISP=(,CATLG,DELETE),
//
SPACE=(CYL,(1,1),RLSE),
//
DCB=(RECFM=FB,LRECL=5,BLKSIZE=0)
//SYSIN DD *
SORT FIELDS=(1,5,ZD,A)
INREC FIELDS=(1:3,5)
/*
//SYSOUT DD SYSOUT=*
//SYSUDUMP DD SYSOUT=*
PGCN25.INREC.IN
----+----1----+****************
A420000 00000100
C410000 00000200
FP70000 00000300
G180000 00000400
G440000 00000500
H250000 00000600
L930000 00000700
N410000 00000800
N460000 00000900
****************
PGCN25.INREC.OUT
----+----1
**********
10000
10000
20000
30000
40000
50000
60000
70000
80000
**********

(7) MERGE

* MERGE IS USED FOR CONCATENATING DATASETS


* NOTE: IF YOU WANT USE ANY KEY , WE HAVE TO KEEP THE I/P DATASETS
*
IN THE SORTED ORDER.ALSO WE CAN USE INCLUDE/INREC
//SORTIN
DD DSN=PGCN25.MERGE.IN,
//
DISP=SHR
//
DD DSN=PGCN25.MERGE.IN1,
//
DISP=SHR
//SORTOUT
DD DSN=PGCN25.MERGE.OUT,
//
DISP=(NEW,CATLG,DELETE),
//
DCB=(RECFM=FB,LRECL=5,BLKSIZE=0),
//
SPACE=(CYL,(4,1),RLSE)
//SYSIN DD *
MERGE FIELDS=COPY
OMIT COND=(1,2,CH,EQ,C'A4')
OUTREC FIELDS=(1:5,5)
/*
//SYSOUT DD SYSOUT=*
//SYSPRINT DD SYSOUT=*
//*END OF SORT
PGCN25.MERGE.IN
----+----1
**********
A4 20000
C4 10000
G4 40000
L9 30000
N4 10000
**********
PGCN25.MERGE.IN1
----+----1***********
A4 80000
G4 80000
H2 50000
L9 70000
N4 60000
***********
PGCN25.MERGE.OUT
----+----1
**********
10000
40000
30000
10000
80000
50000
70000
60000
**********
* SKIPREC SKIP CERTAIN RECORDS FROM THE FIRST
* STOPAFT STOPS AFTER CERTAIN RECORDS AFTER SKIPREC/OMIT ETC

NOTE: COULD BE USED ONLY FOR MERGE FIELDS=COPY

//STEP02 EXEC PGM=SORT


//SORTIN
DD DSN=PGCN25.MERGE.IN,
//
DISP=SHR
//SORTOUT
DD DSN=PGCN25.MERGE.OUT1,
//
DISP=(NEW,CATLG,DELETE),
//
DCB=(RECFM=FB,LRECL=16,BLKSIZE=0),
//
SPACE=(CYL,(4,1),RLSE)
//SYSIN DD *
MERGE FIELDS=COPY,SKIPREC=2,STOPAFT=2
/*
//SYSOUT DD SYSOUT=*
//SYSPRINT DD SYSOUT=*
//*END OF SORT
PGCN25.MERGE.IN
----+----1
**********
A4 20000
C4 10000
G4 40000
L9 30000
N4 10000
**********
PGCN25.MERGE.OUT1
----+----1
**********
G4 40000
L9 30000
**********

(8) MERGEEQ

MERGE EQUALS MERGES THE EQUAL KEYED RECORDS


COULD BE USED WITH SUM FIELDS TO SUM FIELDS WITH EQUAL KEY
HERE MULTIPLE FILES COULD BE MERGED UNLIKE SORT FIELDS WITH SUM
AND INPUT FILES SHOULD BE IN SORTED KEY ORDER
//STEP01 EXEC PGM=SORT
//SORTIN01
DD DSN=PGCN25.MERGEEQ.IN,
//
DISP=SHR
//SORTIN02
DD DSN=PGCN25.MERGEEQ.IN1,
//
DISP=SHR
//SORTOUT
DD DSN=PGCN25.MERGENEQ.OUT,
//
DISP=(NEW,CATLG,DELETE),
//
DCB=(RECFM=FB,LRECL=10,BLKSIZE=0),
//
SPACE=(CYL,(4,1),RLSE)
//SYSIN DD *
MERGE FIELDS=(1,2,BI,A),EQUALS
/*
//SYSOUT DD SYSOUT=*
//SYSPRINT DD SYSOUT=*
//*END OF SORT
PGCN25.MERGEEQ.IN
----+----1
**********
A4 200000
C4 200000
G4 400000
L9 300000
N4 100000
**********
PGCN25.MERGEEQ.IN1
----+----1
**********
C4 300000
G4 200000
L9 200000
N4 300000
Z1 400000
**********
PGCN25.MERGENEQ.OUT
----+----1
**********
A4 200000
C4 200000
C4 300000
G4 400000
G4 200000
L9 300000
L9 200000
N4 100000
N4 300000
Z1 400000
**********

*********************************************************************
* MERGE EQUALS & NOEQUALS PRODUCE THE SAME DATA...NOEQUALS PRINT THE
* DATA IN A DIFFERENT ALTERNATING SEQUENCE FORMAT
//STEP02 EXEC PGM=SORT
//SORTIN01
DD DSN=PGCN25.MERGEEQ.IN,
//
DISP=SHR
//SORTIN02
DD DSN=PGCN25.MERGEEQ.IN1,
//
DISP=SHR
//SORTOUT
DD DSN=PGCN25.MERGEEQ.SUM.OUT,
//
DISP=(NEW,CATLG,DELETE),
//
DCB=(RECFM=FB,LRECL=10,BLKSIZE=0),
//
SPACE=(CYL,(4,1),RLSE)
//SYSIN DD *
MERGE FIELDS=(1,2,BI,A),EQUALS
SUM FIELDS=(5,6,ZD)
/*
//SYSOUT DD SYSOUT=*
//SYSPRINT DD SYSOUT=*
//*END OF SORT
PGCN25.MERGEEQ.SUM.OUT
----+----1
**********
A4 200000
C4 500000
G4 600000
L9 500000
N4 400000
Z1 400000
**********

(9) OMIT

********************************************************************
* A FIELD CAN BE COMPARED WITH A CONSTANT OR ANOTHER FIELD
*
UPTO 180 COMPARISONS CAN BE MADE
* 'AND' EXEUTES FIRST BEFORE 'OR'
* USE BRACKETS TO PRIORITISE THE SELECTION
* FOR PACKED FIELDS FORMAT=PD AND DATA (SAY 11111 SHOULD BE SPECIFIED
* AS P'11111' AFTER THE RELATIONAL PARAMETER
**********************************************************************
//STEP01 EXEC PGM=SORT
//SORTIN DD DSN=PGCN25.OMIT.IN,DISP=SHR
//SORTOUT DD DSN=PGCN25.OMIT.OUT,
//
DISP=(,CATLG,DELETE),
//
SPACE=(CYL,(1,1),RLSE),
//
DCB=(RECFM=FB,LRECL=30,BLKSIZE=0)
//SYSIN DD *
SORT FIELDS=(1,2,BI,D)
OMIT COND=(1,2,CH,EQ,C'A4',&,4,5,ZD,EQ,20000,|,
1,2,CH,EQ,C'G4',&,10,8,CH,EQ,C'FISH')
/*
//SYSOUT DD SYSOUT=*
//SYSUDUMP DD SYSOUT=*
//*
PGCN25.OMIT.IN
----+----1----+----2----+----3
******************************
A4 20000 BOY
11 12 10000
C4 10000 APPLE
22 21 30000
FP 70000 DOG
33 34 50000
G1 80000 CAT
44 43 80000
G4 40000 FISH
55 56 40000
H2 50000 HEN
66 65 70000
L9 30000 ELEPHANT 77 78 60000
N4 10000 GUN
88 87 20000
N4 60000 INK
99 00 90000
******************************
PGCN25.OMIT.OUT
----+----1----+----2----+----3
******************************
N4 10000 GUN
88 87 20000
N4 60000 INK
99 00 90000
L9 30000 ELEPHANT 77 78 60000
H2 50000 HEN
66 65 70000
G1 80000 CAT
44 43 80000
FP 70000 DOG
33 34 50000
C4 10000 APPLE
22 21 30000
******************************

*************************************************
* HERE SPACES ARE REMOVED
* OMIT=NONE & INCLUDE=ALL CAN BE USED
//STEP02 EXEC PGM=SORT
//SORTIN DD DSN=PGCN25.OMIT.IN1,DISP=SHR
//SORTOF1 DD DSN=PGCN25.OMIT.OUT1,
//
DISP=(,CATLG,DELETE),
//
SPACE=(CYL,(1,1),RLSE),
//
DCB=(RECFM=FB,LRECL=30,BLKSIZE=0)
//*
//SORTOF2 DD DSN=PGCN25.OMIT.OUT2,
//
DISP=(,CATLG,DELETE),
//
SPACE=(CYL,(1,1),RLSE),
//
DCB=(RECFM=FB,LRECL=30,BLKSIZE=0)
//*
//SORTOF3 DD DSN=PGCN25.OMIT.OUT3,
//
DISP=(,CATLG,DELETE),
//
SPACE=(CYL,(1,1),RLSE),
//
DCB=(RECFM=FB,LRECL=30,BLKSIZE=0)
//*
//SYSIN DD *
SORT FIELDS=(1,2,BI,D)
* TO REMOVE RECORDS WITH SPACES AT FIRST 2 BYTES
OUTFIL FILES=(1),OMIT=(1,2,CH,EQ,C' ')
* COPIES ALL I/P RECORDS TO O/P
OUTFIL FILES=(2),OMIT=NONE
OUTFIL FILES=(3),INCLUDE=ALL
/*
//SYSOUT DD SYSOUT=*
//SYSUDUMP DD SYSOUT=*
PGCN25.OMIT.IN1
----+----1----+----2----+----3
******************************
20000 BOY
11 12 10000
C4 10000 APPLE
22 21 30000
FP 70000 DOG
33 34 50000
G1 80000 CAT
44 43 80000
40000 FISH
55 56 40000
H2 50000 HEN
66 65 70000
L9 30000 ELEPHANT 77 78 60000
N4 10000 GUN
88 87 20000
60000 INK
99 00 90000
******************************
PGCN25.OMIT.OUT1
----+----1----+----2----+----3
******************************
N4 10000 GUN
88 87 20000
L9 30000 ELEPHANT 77 78 60000
H2 50000 HEN
66 65 70000
G1 80000 CAT
44 43 80000
FP 70000 DOG
33 34 50000
C4 10000 APPLE
22 21 30000
******************************

PGCN25.OMIT.OUT2
----+----1----+----2----+----3
******************************
N4 10000 GUN
88 87 20000
L9 30000 ELEPHANT 77 78 60000
H2 50000 HEN
66 65 70000
G1 80000 CAT
44 43 80000
FP 70000 DOG
33 34 50000
C4 10000 APPLE
22 21 30000
20000 BOY
11 12 10000
40000 FISH
55 56 40000
60000 INK
99 00 90000
******************************

PGCN25.OMIT.OUT3
----+----1----+----2----+----3
******************************
N4 10000 GUN
88 87 20000
L9 30000 ELEPHANT 77 78 60000
H2 50000 HEN
66 65 70000
G1 80000 CAT
44 43 80000
FP 70000 DOG
33 34 50000
C4 10000 APPLE
22 21 30000
20000 BOY
11 12 10000
40000 FISH
55 56 40000
60000 INK
99 00 90000
******************************

(10) OUTFIL
WE CAN CREATE COPIES OF THE I/P FILE
//SORTIN
DD DSN=PGCN25.OUTFIL.IN,
//
DISP=SHR
//SORTOF01 DD DSN=PGCN25.OUTFIL.OUT,
//
DISP=(NEW,CATLG,DELETE),
//
DCB=(RECFM=VB,LRECL=16,BLKSIZE=0),
//
SPACE=(CYL,(4,1),RLSE)
//SORTOF02 DD DSN=PGCN25.OUTFIL.OUT1,
//
DISP=(NEW,CATLG,DELETE),
//
DCB=(RECFM=VB,LRECL=16,BLKSIZE=0),
//
SPACE=(CYL,(4,1),RLSE)
//SYSIN DD *
SORT FIELDS=COPY
OUTFIL FILES=(01,02)
/*
//SYSOUT DD SYSOUT=*
PGCN25.OUTFIL.IN
----+---*********
A4 20000
C4 10000
FP 70000
FP 70000
*********
PGCN25.OUTFIL.OUT
----+---*********
A4 20000
C4 10000
FP 70000
FP 70000
*********
PGCN25.OUTFIL.OUT1
----+---*********
A4 20000
C4 10000
FP 70000
FP 70000
*********

(11) OUTREC
SORT FIELDS = COPY CAN BE USED
NOTE: HERE SORT FIELDS WILL BE EXECUTED BEFORE THE EXECUTION OF
OUTREC FIELDS
//STEP01 EXEC PGM=SORT
//SORTIN DD DSN=PGCN25.OUTREC.IN,DISP=SHR
//SORTOUT DD DSN=PGCN25.OUTREC.OUT,
//
DISP=(,CATLG,DELETE),
//
SPACE=(CYL,(1,1),RLSE),
//
DCB=(RECFM=FB,LRECL=2,BLKSIZE=0)
//SYSIN DD *
SORT FIELDS=(1,2,BI,D)
OUTREC FIELDS=(1:1,2)
/*
//SYSOUT DD SYSOUT=*
//SYSUDUMP DD SYSOUT=*
PGCN25.OUTREC.IN
----+----1----+****************
A420000 00000100
C410000 00000200
FP70000 00000300
G180000 00000400
G440000 00000500
H250000 00000600
L930000 00000700
N410000 00000800
N460000 00000900
****************
PGCN25.OUTREC.OUT
----+----1----+****************
N4
N4
L9
H2
G4
G1
FP
C4
A4
****************

(12) REPORT
* DATE PARM - 8 BYTES, PAGE PARM - 6 BYTES, X-SPACES
* PAGE PARM COULD NOT BE DISPLAYED IN HEADER 1
* HEADER 1 - REPORT TITLE
HEADER 2 - FIELD HEADING
* HEADER 3 - SECTION HEADING
* LINES=60 (DEFAULT LINES IN A PAGE)
* SECTIONS PARM KEEP CONTROL ON 5 BYTE FIELD STARTING AT 4TH BYTE
* TOT SUB PARM CALCULATES TOTALS FOR THE CONTROL FIELD
* SUB PARM HAVE RUNNING TOTALS,SKIP=1L SKIP 1 LINE AFTER SECTION PARM
* SKIP OR HEADER3 OR TRAILER3 IS MANDATORY FOR SECTION PARM
SKIP=P PUTS A PAGE BREAK WHEN THE CONTROL FIELD CHANGES
//STEP01 EXEC PGM=SORT
//SORTIN DD DSN=PGCN25.REPORT.IN,DISP=SHR
//SORTOUT DD DSN=PGCN25.REPORT.OUT,
//
DISP=(,CATLG,DELETE),
//
SPACE=(CYL,(1,1),RLSE),
//
DCB=(RECFM=FBA,LRECL=41,BLKSIZE=0)
//SYSIN DD *
SORT FIELDS=(1,2,CH,A)
OUTFIL OUTREC=(3:1,2,8:4,5,17:10,8,40:C' '),
HEADER1=(2:&DATE,//,4X,
8:'REPORT',/,
8:'------'),
HEADER2=(7:'PAGE-',12:&PAGE,/,
3:'CD#',
8:'NO:',
17:'ITEM',/,
3:'---',
8:'---',
17:'----'),LINES=20,
SECTIONS=(4,5,SKIP=1L,
HEADER3=(3:'SECTION HEADER'),
TRAILER3=(/,2:'TOTAL',TOT=(4,5,ZD,EDIT=($II,IIT)))),
TRAILER2=(1:'GRD-TOT',TOT=(4,5,ZD,EDIT=($II,IIT))),
TRAILER1=(/,1:'TOTAL RECS',COUNT,/,
3:'*** END OF REPORT ***')
/*
//SYSOUT DD SYSOUT=*
//SYSUDUMP DD SYSOUT=*
PGCN25.REPORT.IN
----+----1----+----2----+----3
******************************
A4 1000 BOY
11 11 10000
C4 1000 APPLE
11 11 10000
FP 1000 DOG
11 11 10000
G1 1000 CAT
11 11 10000
G4 10000 FISH
12 11 10000
H2 10000 HEN
12 11 10000
L9 10000 ELEPHANT 12 11 10000
N4 10000 GUN
12 11 10000
N4 10000 INK
12 11 10000

******************************
----+----1----+----2---************************
07/04/01
REPORT
-----PAGE1
CD# NO:
ITEM
--- -----SECTION HEADER
A4
1000
BOY
C4
1000
APPLE
FP
1000
DOG
G1
1000
CAT
TOTAL $4,000
SECTION HEADER
G4
10000
FISH
H2
10000
HEN
L9
10000
ELEPHANT
N4
10000
GUN
N4
10000
INK
TOTAL$50,000
GRD-TOT$54,000
TOTAL RECS
9
*** END OF REPORT ***
************************

(13) SUMFIELD
*USE SORT FIELDS TO HAVE A CONTROL ON A FIELD &
*& USE SUM FIELDS TO SUM CERTAIN FIELDS
*NOTE: ONLY THE FIRST ENTRY OF THE CONTROL FIELD WILL BE PRESENT
*
IN THE OUTPUT IF IT IS NUMERIC OTHERWISE LIKE FIELDS WILL
*
GET ADDED.
* WE CAN'T USE FIELDS=COPY & SUM FIELDS B'COZ COPY FIELDS SUPRESS
* SUM FIELDS
* ONLY ONE I/P FILE IS ALLOWED
//STEP01 EXEC PGM=SORT
//SORTIN
DD DSN=PGCN25.SUM.IN,
//
DISP=SHR
//SORTOUT
DD DSN=PGCN25.SUM.OUT,
//
DISP=(NEW,CATLG,DELETE),
//
DCB=(RECFM=FB,LRECL=30,BLKSIZE=0),
//
SPACE=(CYL,(4,1),RLSE)
//SYSIN DD *
* SORT FIELDS SPECIFIED HERE IS TO SORT THE RECORDS AND TO HAVE CONTROL
* ON A FIELD THAT IS EQUAL IN VALUE
SORT FIELDS=(1,2,BI,A)
* SUM FIELDS SPECIFIED HERE IS TO SUM THE FIELDS WITH EQUAL DATA OF THE
* CONTROL FIELD
SUM FIELDS=(4,5,ZD)
/*
//SYSOUT DD SYSOUT=*
//SYSPRINT DD SYSOUT=*
//*END OF SORT
PGCN25.SUM.IN
----+----1----+----2----+----3
******************************
A1 20000 BOY
11 12 10000
A1 10000 BOY
12 12 10000
B2 30000 DOG
11 34 50000
C3 30000 CAT
12 43 80000
B2 40000 DOG
12 34 50000
C3 50000 CAT
12 43 80000
D4 30000 ELEPHANT 11 78 60000
D4 10000 ELEPHANT 12 78 60000
D4 20000 ELEPHANT 11 78 60000
******************************
PGCN25.SUM.OUT
----+----1----+----2----+----3
******************************
A1 30000 BOY
11 12 10000
B2 70000 DOG
11 34 50000
C3 80000 CAT
12 43 80000
D4 60000 ELEPHANT 11 78 60000
******************************

(14) SUMMARY
-------S U M M A R Y
R E P O R T
-------USE SORT FIELDS TO HAVE A CONTROL ON A FIELD &
USE SUM FIELDS TO SUM ALL FIELDS OR USE TOT PARM TO TOTAL AND
DISPLAY IN A TRAILER.
NOTE: HAVE CONTROL ON A NUMERIC FIELD & USE SUM FIELDS,OUTREC FIELD
& TOTAL SHOULD NOT OVERFLOW THAN THE SPECIFIED LENGTH
//STEP01 EXEC PGM=SORT
//SORTIN
DD DSN=PGCN25.SUMMARY.IN,
//
DISP=SHR
//SORTOUT
DD DSN=PGCN25.SUMMARY.OUT,
//
DISP=(NEW,CATLG,DELETE),
//*
DCB=(RECFM=FBA,LRECL=31,BLKSIZE=0),
//
SPACE=(CYL,(1,1),RLSE)
//SYSIN DD *
SORT FIELDS=(2,1,ZD,A)
SUM FIELDS=(4,2,7,2,11,5),FORMAT=ZD
OUTFIL OUTREC=(3:4,2,10:7,2,17:11,5,30:C' '),
HEADER1=(05:'SUMMARY REPORT',/,
05:'------- ------',/),
HEADER2=(3:'TOT1',10:'TOT2',17:'TOT5',/,
3:'----',10:'----',17:'----')
/*
//SYSOUT DD SYSOUT=*
//SYSPRINT DD SYSOUT=*
//*END OF SORT
PGCN25.SUMMARY.IN
----+----1----+
***************
1 11 12 10000
1 2 2 10000
1 11 4 10000
1 2 3 10000
1 12 4 10000
1 2 3 10000
1 11 8 10000
1 12 8 10000
1 11 8 10000
***************
PGCN25.SUMMARY.OUT
----+----1----+----2*********************
SUMMARY REPORT
------- -----TOT1
TOT2
TOT5
---------74
52
90000
*********************

(15) VARLEN
VARIABLE LENGTH RECORDS HANDLING
//STEP01 EXEC PGM=SORT
//SORTIN
DD DSN=PGCN25.VARLEN.IN,
//
DISP=SHR
//SORTOUT
DD DSN=PGCN25.VARLEN.OUT,
//
DISP=(NEW,CATLG,DELETE),
//*
DCB=(RECFM=VB,LRECL=24,BLKSIZE=0),
//
SPACE=(CYL,(10,5),RLSE)
//SYSIN DD *
SORT FIELDS=COPY
* RECORD DESCRIPTOR WORD FOR VB RECS WILL BE THE FIRST 4 BYTES
* OF THE RECORD
* FINAL LENGTH SHOULD NOT BE GIVEN
OUTREC FIELDS=(1:1,4,5:6,1,6:5,1,7:7,3,13:13,1,17:17,1,18)
/*
//SYSOUT DD SYSOUT=*
//SYSPRINT DD SYSOUT=*
//*END OF SORT
PGCN25.VARLEN.IN
----+----1----+----******************
A1CA3 0 990201
A1CA4 - 001001
A1CA5 0 980201
A1CA6 0 010701
A1CA7 - 970901
A1CA8 0 010301
A1CA9 0 010301
A1CB1 0 010301
A1CB2 0 010301
A1CB3 0 010301
******************
PGCN25.VARLEN.OUT
----+----1----+--******************
1ACA3
0
990201
1ACA4
001001
1ACA5
0
980201
1ACA6
0
010701
1ACA7
970901
1ACA8
0
010301
1ACA9
0
010301
1ACB1
0
010301
1ACB2
0
010301
1ACB3
0
010301
******************

You might also like