View previous topic :: View next topic
Author
Message
ofer71 Global Moderator Joined: 27 Dec 2005Posts: 2358 Location: Israel
Hi all
I need to match members of several PDSs and to report on each member that resides in more then one PDS.
For a start, I've compiled a list of all members in each PDS. For now, I have the following 4 datasets, each containing a sorted list of members for each PDS. For example:
LIST.A
MEMBERA
MEMBERB
MEMBERC
MEMBERD
MEMBERE
LIST.B
MEMBERA
MEMBERF
MEMBERG
MEMBERH
MEMBERI
LIST.C
MEMBERA
MEMBERB
MEMBERJ
MEMBERK
MEMBERL
LIST.D
MEMBERL
MEMBERM
MEMBERN
MEMBERO
MEMBERP
The desired result should look something like:
Code:
MEMBERA LIST.A
LIST.B
LIST.C
MEMBERB LIST.A
LIST.C
MEMBERL LIST.C
LIST.D
How can I do this using DFSORT?
Thanks,
O.
Back to top
gcicchet Senior Member Joined: 28 Jul 2006Posts: 1702 Location: Australia
Hi,
this may assist
Code:
//S1 EXEC PGM=ICETOOL
//TOOLMSG DD SYSOUT=*
//DFSMSG DD SYSOUT=*
//LISTA DD *
MEMBERA
MEMBERB
MEMBERC
MEMBERD
MEMBERE
//LISTB DD *
MEMBERA
MEMBERF
MEMBERG
MEMBERH
MEMBERI
//LISTC DD *
MEMBERA
MEMBERB
MEMBERJ
MEMBERK
MEMBERL
//LISTD DD *
MEMBERL
MEMBERM
MEMBERN
MEMBERO
MEMBERP
//T1 DD DSN=&&T1,UNIT=SYSDA,SPACE=(CYL,(5,5)),DISP=(MOD,PASS)
//T2 DD DSN=&&T2,UNIT=SYSDA,SPACE=(CYL,(5,5)),DISP=(MOD,PASS)
//ALLDUPS DD SYSOUT=*
//TOOLIN DD *
COPY FROM(LISTA) TO(T1) USING(CTL1)
COPY FROM(LISTB) TO(T1) USING(CTL2)
COPY FROM(LISTC) TO(T1) USING(CTL3)
COPY FROM(LISTD) TO(T1) USING(CTL4)
SELECT FROM(T1) TO(T2) ON(01,8,CH) ALLDUPS
COPY FROM(T2) TO(ALLDUPS) USING(CTL5)
/*
//CTL1CNTL DD *
INREC OVERLAY=(11:C'LIST.A')
/*
//CTL2CNTL DD *
INREC OVERLAY=(11:C'LIST.B')
/*
//CTL3CNTL DD *
INREC OVERLAY=(11:C'LIST.C')
/*
//CTL4CNTL DD *
INREC OVERLAY=(11:C'LIST.D')
/*
//CTL5CNTL DD *
INREC IFTHEN=(WHEN=INIT,OVERLAY=(50:SEQNUM,8,ZD,RESTART=(1,8))),
IFTHEN=(WHEN=(50,8,ZD,GT,1),OVERLAY=(1:C' '))
/*
No doubt you will get simpler solutions but it might be a start.
Gerry
Back to top
ofer71 Global Moderator Joined: 27 Dec 2005Posts: 2358 Location: Israel
gcicchet,
Thank you very much. The solution works for me.
O.
Back to top
Skolusu Senior Member Joined: 07 Dec 2007Posts: 2205 Location: San Jose
The following 1 pass DFSORT JCL will give you the desired results
I assumed the following
1. All your list datasets have same LRECL 80 bytes and FB recfm
2. All the datasets have a header named LIST in the first 4 bytes
Code:
//STEP0100 EXEC PGM=SORT
//SYSOUT DD SYSOUT=*
//SORTIN DD *
LIST.A
MEMBERA
MEMBERB
MEMBERC
MEMBERD
MEMBERE
// DD *
LIST.B
MEMBERA
MEMBERF
MEMBERG
MEMBERH
MEMBERI
// DD *
LIST.C
MEMBERA
MEMBERB
MEMBERJ
MEMBERK
MEMBERL
// DD *
LIST.D
MEMBERL
MEMBERM
MEMBERN
MEMBERO
MEMBERP
//SORTOUT DD SYSOUT=*
//SYSIN DD *
INREC IFTHEN=(WHEN=GROUP,BEGIN=(1,4,CH,EQ,C'LIST'),PUSH=(10:1,8))
SORT FIELDS=(1,8,CH,A)
OUTREC IFTHEN=(WHEN=INIT,OVERLAY=(81:SEQNUM,8,ZD,RESTART=(1,8))),
IFTHEN=(WHEN=GROUP,BEGIN=(81,8,ZD,EQ,1),PUSH=(89:1,80)),
IFTHEN=(WHEN=(81,8,ZD,GT,1),OVERLAY=(1:8X))
OUTFIL INCLUDE=(81,8,ZD,GT,1),IFOUTLEN=80,
IFTHEN=(WHEN=(81,8,ZD,EQ,2),BUILD=(89,80,/,1,80))
/*
The output from this job is
Code:
MEMBERA LIST.A
LIST.B
LIST.C
MEMBERB LIST.A
LIST.C
MEMBERL LIST.C
LIST.D
Back to top
Please enable JavaScript!