View previous topic :: View next topic
Author
Message
karthikr44 Active User Joined: 25 Aug 2007Posts: 235 Location: Chennai
Hi,
I will explain my requirement.
Here if u see the input file, there are
4 users belongs to #1RTRTA
3 users belongs to #1RTRTB
2 users belongs to #1RTRTC
1 user belongs to #1RTRTD
1 user belongs to #1RTRTE
I want o/p file with the records for the #1RTRTA, #1RTRTB, #1RTRTC. Since these are
the top most 3 groups with maximum number of users.
Code:
Default
Userid User Name Group Owner
-------- -------------------- -------- --------
#123 ABCD #1RTRTA ##BG
#455 FRUSC #1RTRTA ##BG
#44334 BISS #1RTRTB ##BG
#3230 FRT #1RTRTA ##BG
#322 DATA #1RTRTA ##BG
#5456 CORP #1RTRTB ##BG
#6775 DBC #1RTRTB ##BG
#5646 DBC #1RTRTC ##BG
#366456 DBC #1RTRTD ##BG
#235 DBC #1RTRTC ##BG
#336456 DBC #1RTRTE ##BG
Expected o/p file:
Code:
Default
Userid User Name Group Owner
-------- -------------------- -------- --------
#123 ABCD #1RTRTA ##BG
#455 FRUSC #1RTRTA ##BG
#3230 FRT #1RTRTA ##BG
#322 DATA #1RTRTA ##BG
#44334 BISS #1RTRTB ##BG
#5456 CORP #1RTRTB ##BG
#6775 DBC #1RTRTB ##BG
#5646 DBC #1RTRTC ##BG
#235 DBC #1RTRTC ##BG
I/p and o/p:
Record format . . . : FBA
Record length . . . : 133
User ID field: (3,8) This field is unique.
Default Group field: (36,8)
Thanks in advance
R KARTHIK
Back to top
Aaru Senior Member Joined: 03 Jul 2007Posts: 1287 Location: Chennai, India
Karthik,
Quote:
Since these are
the top most 3 groups with maximum number of users.
Do you want this to be checked dynamically and retain only the records for the top 3 groups?
Back to top
karthikr44 Active User Joined: 25 Aug 2007Posts: 235 Location: Chennai
Hi,
I want to retain only the records for the top 3 groups.
Regards
R KARTHIK
Back to top
shankar.v Active User Joined: 25 Jun 2007Posts: 196 Location: Bangalore
karthikr44,
Please check with the following code for your requirment.
Code:
// EXEC PGM=SYNCTOOL
//TOOLMSG DD SYSOUT=*
//DFSMSG DD SYSOUT=*
//CTL3JNF1 DD DSN=&&T2,DISP=(,DELETE)
//CTL3JNF2 DD DSN=FBA133.IN,DISP=SHR
//T1 DD DSN=&&T1,DISP=(,DELETE)
//OUT DD DSN=FBA133.OUT,DISP=SHR
//TOOLIN DD *
SORT FROM(CTL3JNF2) TO(T1) USING(CTL1)
COPY FROM(T1) TO(CTL3JNF1) USING(CTL2)
SORT FROM(CTL3JNF1) TO(OUT) USING(CTL3)
/*
//CTL1CNTL DD *
OPTION EQUALS
SORT FIELDS=(36,8,CH,A)
OUTFIL REMOVECC,NODETAIL,SECTIONS=(36,8,TRAILER3=(36,8,X,COUNT=(M11)))
/*
//CTL2CNTL DD *
OPTION STOPAFT=3
/*
//CTL3CNTL DD *
OPTION EQUALS
JOINKEYS FILE=F1,FIELDS=(1,8,A)
JOINKEYS FILE=F2,FIELDS=(36,8,A)
REFORMAT FIELDS=(F2:1,133,F1:10,15)
SORT FIELDS=(81,15,CH,D)
OUTFIL OUTREC=(1,133)
/*
//
Thanks,
Shankar
Back to top
Arun Raj Moderator Joined: 17 Oct 2006Posts: 2481 Location: @my desk
shankar.v,
The job you posted might work for this particular example but I think it may not produce the desired results for all the cases. (say #1RTRTD occurs 5 times)
Back to top
shankar.v Active User Joined: 25 Jun 2007Posts: 196 Location: Bangalore
arcvns,
Quote:
The job you posted might work for this particular example but I think it may not produce the desired results for all the cases. (say #1RTRTD occurs 5 times)
Yes, You are correct. The code has been modified as follows:
Code:
// EXEC PGM=ICETOOL
//TOOLMSG DD SYSOUT=*
//DFSMSG DD SYSOUT=*
//CTL3JNF2 DD DSN=FBA133.IN,DISP=SHR
//T1 DD DSN=&&T1,DISP=(,DELETE)
//CTL3JNF1 DD DSN=&&T2,DISP=(,DELETE)
//OUT DD DSN=FBA133.OUT,DISP=SHR
//TOOLIN DD *
SORT FROM(CTL3JNF2) TO(T1) USING(CTL1)
SORT FROM(T1) TO(CTL3JNF1) USING(CTL2)
SORT FROM(CTL3JNF1) TO(OUT) USING(CTL3)
/*
//CTL1CNTL DD *
OPTION EQUALS
SORT FIELDS=(36,8,CH,A)
OUTFIL REMOVECC,NODETAIL,SECTIONS=(36,8,TRAILER3=(36,8,X,COUNT=(M11)))
/*
//CTL2CNTL DD *
SORT FIELDS=(10,15,CH,D)
OUTFIL REMOVECC,STARTREC=1,ENDREC=3
/*
//CTL3CNTL DD *
OPTION EQUALS
JOINKEYS FILE=F1,FIELDS=(1,8,A)
JOINKEYS FILE=F2,FIELDS=(36,8,A)
REFORMAT FIELDS=(F2:1,133,F1:10,15)
SORT FIELDS=(134,15,CH,D)
OUTFIL OUTREC=(1,133)
/*
//
Thanks,
Shankar
Back to top
karthikr44 Active User Joined: 25 Aug 2007Posts: 235 Location: Chennai
HI shankar.v,
Thanks for ur solution, i will check and let u know the results.
Regards
R KARTHIK
Back to top
Arun Raj Moderator Joined: 17 Oct 2006Posts: 2481 Location: @my desk
Quote:
4 users belongs to #1RTRTA
3 users belongs to #1RTRTB
2 users belongs to #1RTRTC
1 user belongs to #1RTRTD
1 user belongs to #1RTRTE
2 users belongs to #1RTRTF
karthikr44,
Just in case, if you have multiple groups with 3rd rank as shown above, do you want only one group in output or both?
Back to top
karthikr44 Active User Joined: 25 Aug 2007Posts: 235 Location: Chennai
Hi arcvns,
I want both..
Regards
R KARTHIK
Back to top
Arun Raj Moderator Joined: 17 Oct 2006Posts: 2481 Location: @my desk
karthikr44 ,
The below SYNCTOOL job does what you're trying to achieve. Goodluck
Code:
//STEP1 EXEC PGM=SYNCTOOL
//IN DD DSN= Input file - FBA/133
//OUT DD DSN= Output file - FBA/133
//DFSMSG DD SYSOUT=*
//TOOLMSG DD SYSOUT=*
//T1 DD DSN=&&T1,DISP=(,PASS)
//C1 DD DSN=&&C1,DISP=(,PASS)
//TOOLIN DD *
SORT FROM(IN) TO(T1) USING(CTL1)
SORT FROM(T1) TO(C1) USING(CTL2)
SELECT FROM(IN) TO(OUT) ON(36,8,CH) -
// DD DSN=*.C1,VOL=REF=*.C1,DISP=(OLD,PASS)
//CTL1CNTL DD *
SORT FIELDS=(36,8,CH,A)
OUTFIL REMOVECC,NODETAIL,
SECTIONS=(36,8,TRAILER3=(COUNT=(M11,LENGTH=8)))
//CTL2CNTL DD *
SORT FIELDS=(1,8,ZD,D)
SUM FIELDS=NONE
OUTFIL STARTREC=4,ENDREC=4,BUILD=(3:C'HIGHER(',1,8,C')',80:X)
Back to top
karthikr44 Active User Joined: 25 Aug 2007Posts: 235 Location: Chennai
Hi arun,
I am getting MAXCC 12 with ur code. Kindly clarify me how to solve this.
Code:
SYT000I SYNCTOOL RELEASE 1.6.1 - COPYRIGHT 2007 SYNCSORT INC.
SYT001I INITIAL PROCESSING MODE IS "STOP"
SYT002I "TOOLIN" INTERFACE BEING USED
SORT FROM(IN) TO(T1) USING(CTL1)
SYT020I SYNCSORT CALLED WITH IDENTIFIER "0001"
SYT030I OPERATION COMPLETED WITH RETURN CODE 0
SORT FROM(T1) TO(C1) USING(CTL2)
SYT020I SYNCSORT CALLED WITH IDENTIFIER "0002"
SYT030I OPERATION COMPLETED WITH RETURN CODE 0
SELECT FROM(IN) TO(OUT) ON(36,8,CH) -
SYT008E END OF FILE ENCOUNTERED WHILE PROCESSING STATEMENT CONTINUATION
SYT030I OPERATION COMPLETED WITH RETURN CODE 12
SYT004I SYNCTOOL PROCESSING COMPLETED WITH RETURN CODE 12
Thanks
R KARTHIK
Back to top
Arun Raj Moderator Joined: 17 Oct 2006Posts: 2481 Location: @my desk
Karthik,
Can you post the DFSMSG output here.
Back to top
karthikr44 Active User Joined: 25 Aug 2007Posts: 235 Location: Chennai
Hi,
DFSMSG:
Code:
CTL1CNTL :
SORT FIELDS=(36,8,CH,A)
OUTFIL REMOVECC,NODETAIL,
SECTIONS=(36,8,TRAILER3=(COUNT=(M11,LENGTH=8)))
PARMLIST :
OPTION RESINV=0,ARESINV=0,MSGDDN=DFSMSG,SORTIN=IN,SORTOUT=T1,SORTDD=CTL1,DYNALL
C
WER428I CALLER-PROVIDED IDENTIFIER IS "0001"
WER161B ALTERNATE PARM USED
WER276B SYSDIAG= 278845, 788198, 788198, 1995462
WER164B 25,008K BYTES OF VIRTUAL STORAGE AVAILABLE, MAX REQUESTED,
WER164B 0 BYTES RESERVE REQUESTED, 24,448K BYTES USED
WER146B 128K BYTES OF EMERGENCY SPACE ALLOCATED
WER108I IN : RECFM=FBA ; LRECL= 133; BLKSIZE= 27930
WER110I T1 : RECFM=FBA ; LRECL= 133; BLKSIZE= 27930
WER410B 23,468K BYTES OF VIRTUAL STORAGE AVAILABLE ABOVE THE 16MEG LINE,
WER410B 0 BYTES RESERVE REQUESTED, 23,444K BYTES USED
WER036B G=840,B=400
WER045C END SORT PHASE
WER418I DATASPACE(S) AND/OR HIPERSPACE(S) USED
WER405I T1 : DATA RECORDS OUT 0; TOTAL RECORDS OUT 3
WER211B SYNCSMF CALLED BY SYNCSORT; RC=0000
WER416B IN : EXCP'S=1,UNIT=3390,DEV=B870,CHP=(B4B6B8BAB5B7B9BB,2),VOL=DV
WER416B OUTFIL WAS USED FOR T1
WER246I FILESIZE 4,389 BYTES
WER054I RCD IN 33, OUT 33
WER072I NOEQUALS, ELAP IN EFFECT
WER169I RELEASE 1.3 BATCH 0485 TPF LEVEL 1.0
WER052I END SYNCSORT - TSDSORT,STEP1,,DIAG=C700,400F,EAB5,E0F7,9E4A,6982,2660,
SYNCSORT FOR Z/OS 1.3.1.0RI PARMTBLE : VSCORE=1536K,VSCORET=8M
CTL2CNTL :
SORT FIELDS=(1,8,ZD,D)
SUM FIELDS=NONE
OUTFIL STARTREC=4,ENDREC=4,BUILD=(3:C'HIGHER(',1,8,C')',80:X)
PARMLIST :
OPTION RESINV=0,ARESINV=0,MSGDDN=DFSMSG,SORTIN=T1,SORTOUT=C1,SORTDD=CTL2,DYNALL
C
WER428I CALLER-PROVIDED IDENTIFIER IS "0002"
WER161B ALTERNATE PARM USED
WER276B SYSDIAG= 278855, 788208, 788208, 1995462
WER164B 25,008K BYTES OF VIRTUAL STORAGE AVAILABLE, MAX REQUESTED,
WER164B 0 BYTES RESERVE REQUESTED, 24,448K BYTES USED
WER146B 128K BYTES OF EMERGENCY SPACE ALLOCATED
WER108I T1 : RECFM=FBA ; LRECL= 133; BLKSIZE= 27930
WER110I C1 : RECFM=FBA ; LRECL= 80; BLKSIZE= 27920
WER410B 23,468K BYTES OF VIRTUAL STORAGE AVAILABLE ABOVE THE 16MEG LINE,
WER410B 0 BYTES RESERVE REQUESTED, 23,444K BYTES USED
WER036B G=840,B=394
WER045C END SORT PHASE
WER055I INSERT 0, DELETE 1
WER418I DATASPACE(S) AND/OR HIPERSPACE(S) USED
WER405I C1 : DATA RECORDS OUT 0; TOTAL RECORDS OUT 0
WER211B SYNCSMF CALLED BY SYNCSORT; RC=0000
WER416B T1 : EXCP'S=1,UNIT=3390,DEV=B966,CHP=(B0B2B4B6B1B3B5B7,2),VOL=PU
WER416B OUTFIL WAS USED FOR C1
WER246I FILESIZE 399 BYTES
WER054I RCD IN 3, OUT 2
WER072I NOEQUALS, ELAP IN EFFECT
WER169I RELEASE 1.3 BATCH 0485 TPF LEVEL 1.0
WER052I END SYNCSORT - TSDSORT,STEP1,,DIAG=EF00,6007,C2B5,E85F,A64A,498A,0660,
Back to top
Arun Raj Moderator Joined: 17 Oct 2006Posts: 2481 Location: @my desk
karthikr44 ,
From your joblogs, I see your input data had 33 records and you have only 3 distinct groups which means there's really no need to find the top 3 in this particular case.
The job which I gave you expects a minimum of atleast 4 groups in the input.
Back to top
Please enable JavaScript!