IBM Mainframe Forum Index
 
Log In
 
IBM Mainframe Forum Index Mainframe: Search IBM Mainframe Forum: FAQ Register
 

Match records from multiple input datasets


IBM Mainframe Forums -> DFSORT/ICETOOL
Post new topic   Reply to topic
View previous topic :: View next topic  
Author Message
ofer71

Global Moderator


Joined: 27 Dec 2005
Posts: 2358
Location: Israel

PostPosted: Tue Sep 08, 2009 1:30 am
Reply with quote

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
View user's profile Send private message
gcicchet

Senior Member


Joined: 28 Jul 2006
Posts: 1702
Location: Australia

PostPosted: Tue Sep 08, 2009 6:22 am
Reply with quote

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
View user's profile Send private message
ofer71

Global Moderator


Joined: 27 Dec 2005
Posts: 2358
Location: Israel

PostPosted: Tue Sep 08, 2009 11:30 am
Reply with quote

gcicchet,

Thank you very much. The solution works for me. icon_biggrin.gif

O.
Back to top
View user's profile Send private message
Skolusu

Senior Member


Joined: 07 Dec 2007
Posts: 2205
Location: San Jose

PostPosted: Tue Sep 08, 2009 9:06 pm
Reply with quote

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
View user's profile Send private message
View previous topic :: :: View next topic  
Post new topic   Reply to topic View Bookmarks
All times are GMT + 6 Hours
Forum Index -> DFSORT/ICETOOL

 


Similar Topics
Topic Forum Replies
No new posts TRIM everything from input, output co... DFSORT/ICETOOL 1
No new posts INCLUDE OMIT COND for Multiple values... DFSORT/ICETOOL 5
No new posts Extracting Variable decimal numbers f... DFSORT/ICETOOL 17
No new posts Compare only first records of the fil... SYNCSORT 7
No new posts Pulling a fixed number of records fro... DB2 2
Search our Forums:

Back to Top