Paired records F1 – Below example illustrates how you can select only paired records from one of two files. In this case, we will select the F1 records that have a match in F2 on the specified keys (for example, key1=Development and key2=Master). The F1 records are in comma-delimited form so we will parse them to get the binary keys we need.

//JKE3  EXEC  PGM=SORT
//SYSOUT    DD  SYSOUT=*
//MASTER DD DSN=MASTER.FILE,DISP=SHR
//PULL DD DSN=PULL.FILE,DISP=SHR
//SORTOUT DD SYSOUT=*
//JNF1CNTL DD *
Control statement for subtask1 (F1)
INREC PARSE=(%01=(ENDBEFR=C',',FIXLEN=15),
           %=(ENDBEFR=C','),
           %02=(ENDBEFR=C',',FIXLEN=10)),
OVERLAY=(36:%01,52:%02)
/*
//DFSPARM   DD    *
Control statements for JOINKEYS application
JOINKEYS F1=MASTER,FIELDS=(36,15,A,52,10,A)
JOINKEYS F2=PULL,FIELDS=(12,15,A,1,10,A)
REFORMAT FIELDS=(F1:1,35)
Control statement for main task
OPTION COPY
/*

Input file1 (F1) has RECFM=FB and LRECL=35. It contains the following records:

Marketing,William,Master 
Development,John,Bachelor 
Manufacturing,Louis,Master 
Development,Carol,Master 
Research,Angela,Master 
Research,Anne,Doctorate
Development,Sara,Doctorate 
Marketing,Joseph,Master
Manufacturing,Donna,Bachelor 
Development,Susan,Master 
Manufacturing,Nick,Master 
Research,Howard,Doctorate

Input file2 (F2) has RECFM=FB and LRECL=30. It contains the following records:

Master     Development
Master     Manufacturing
Bachelor   Development
Doctorate  Research

The output file will have RECFM=FB and LRECL=35. It will contain the paired F1 records, that is, the records from F1 that have a match in F2 for the specified keys (the first and third fields):

Development,John,Bachelor
Development,Carol,Master
Development,Susan,Master
Manufacturing,Louis,Master
Manufacturing,Nick,Master
Research,Anne,Doctorate
Research,Howard,Doctorate

The first JOINKEYS statement defines the DDNAME and keys for the F1 file. F1=MASTER tells DFSORT that the DDNAME for the F1 file is MASTER.

The control statements in JNF1CNTL will be used to process the F1 file before it is sorted. The input records are in comma-delimited form, so to use the first and third fields as binary keys, while preserving the original data, we use an INREC statement to parse out the fields we want and add them to the end of the record. The parsed first key will be in positions 36-50 and the parsed second key will be in positions 52-61. For example, the first reformatted record will look like this:

Marketing,William,Master           Marketing       Master

FIELDS=(36,15,A,52,10,A)in the JOINKEYS statement (referring to the reformatted INREC positions) tells DFSORT that the first key is in positions 36-50 ascending and the second key is in positions 52-61 ascending.

The second JOINKEYS statement defines the DDNAME and keys for the F2 file. F2=PULL tells DFSORT that the DDNAME for the F2 file is PULL.

FIELDS=(12,15,A,1,10,A)in the JOINKEYS statement tells DFSORT that the first key is in positions 12-26 ascending and the second key is in positions 1-10 ascending.

The REFORMAT statement defines the fields to be extracted for the joined records in the order in which they are to appear. FIELDS=(F1:1,35) tells DFSORT to create the joined records from the original F1 input records (positions 1-35 of the F1 records). Since we only needed the added parsed fields for sorting, we don’t need to include the min the joined records. Of course, if we wanted the main task to “see” the parsed fields in the joined records, we could include the parsed fields in the REFORMAT FIELDS operand.

Since there is no JOIN statement, only paired records are joined by default.

The OPTION COPY statement tells DFSORT to copy the joined records.

Conceptually, JOINKEYS application processing proceeds as follows:

  • Subtask1 performs INREC processing for the MASTER (F1 file) records as directed by the control statement in JNF1CNTL and sorts the resulting records as directed by its JOINKEYS statement. As a result, it passes the following records to the main task:
Development,John,Bachelor          Development     Bachelor
Development,Sara,Doctorate         Development     Doctorate
Development,Carol,Master           Development     Master
Development,Susan,Master           Development     Master
Manufacturing,Donna,Bachelor       Manufacturing   Bachelor
Manufacturing,Louis,Master         Manufacturing   Master
Manufacturing,Nick,Master          Manufacturing   Master
Marketing,William,Master           Marketing       Master
Marketing,Joseph,Master            Marketing       Master
Research,Howard,Doctorate          Research        Doctorate
Research,Anne,Doctorate            Research        Doctorate
Research,Angela,Master             Research        Master
  • Subtask2 sorts the PULL (F2 file) records as directed by its JOINKEYS statement. As a result, it passes the following records to the main task:
Bachelor   Development
Master     Development
Master     Manufacturing
Doctorate  Research
  • The main task joins the records passed from subtask1 and subtask2 as directed by the specified JOINKEYS and REFORMAT statements, resulting in the following joined records:
Development,John,Bachelor
Development,Carol,Master
Development,Susan,Master
Manufacturing,Louis,Master
Manufacturing,Nick,Master
Research,Anne,Doctorate
Research,Howard,Doctorate

• Finally, the main task copies the joined records to SORTOUT. Thus, SORTOUT contains these records:

Development,John,Bachelor
Development,Carol,Master
Development,Susan,Master
Manufacturing,Louis,Master
Manufacturing,Nick,Master
Research,Anne,Doctorate
Research,Howard,Doctorate
Example 1 – Paired records without duplicates (F1/F2)
Example 2 – Paired records with duplicates (F1/F2)
Example 3 – Paired records (F1)
Example 4 – Unpaired records (F2)
Example 5 – Indicator Method : Paired and unpaired records (F1/F2)
Example 6 – Fill Method : Paired and unpaired records (F1/F2)

Read JCL blogs: Click Here SYNCSORT Manual: Click Here

Scroll to Top