Tony,

It is quite easy to split the group of records into multiple members. Here 
is a sample JCL which will give you the desired results of splitting the 
first 999 groups of records into a PDSE each containing the group of 
records. I also assumed your Input is already sorted on the field you want 
to split. I assumed that the split field is 44 bytes in length. If it is 
different then you can change it in ALL the places referred by KEYBEGIN.

This job creates a dynamic JCL which will then be submitted via INTRDR. 
Take a look at the output from Step0200 and then if everything looks ok 
then change the statement 
//SORTOUT  DD SYSOUT=*  to  //SORTOUT  DD SYSOUT=(*,INTRDR),RECFM=FB 
 
If you have more than 999 groups of records we will copy the rest of the 
records into another file which will then be used as input file to further 
split. I will show you how to build the dynamic JCL's based on that. I 
chose the split to be 999 groups as the maximum number of DD statements 
per job step is 3273, based on the number of single DD statements allowed 
for a TIOT (task input output table) control block size of 64K. This limit 
can be different depending on the installation defined TIOT size. The 
IBM-supplied default TIOT size is 32K. 

//*********************************************************************
//*  BUILD DYNAMIC OUTFIL CARDS AND DDNAMES FOR EACH GROUP OF RECORDS *
//*********************************************************************
//STEP0100 EXEC PGM=SORT 
//SYSOUT   DD SYSOUT=* 
//SORTIN   DD DISP=SHR,DSN=Your Input FB 100 Byte file
//* 
//OFCARDS  DD DSN=&&C,DISP=(,PASS),SPACE=(CYL,(20,20),RLSE) 
//DDNAMES  DD DSN=&&D,DISP=(,PASS),SPACE=(CYL,(20,20),RLSE)
//SORTOUT  DD DUMMY 
//SYSIN    DD * 
  OPTION COPY,NULLOUT=RC4 
  OUTREC IFTHEN=(WHEN=GROUP,KEYBEGIN=(1,44),PUSH=(101:ID=4)) 
 
  OUTFIL FNAMES=OFCARDS,REMOVECC,NODETAIL,BUILD=(80X), 
  INCLUDE=(101,4,ZD,LT,1000), 
  SECTIONS=(101,4, 
  TRAILER3=(3:'OUTFIL FNAMES=OUTF',101,4,',BUILD=(1,100),', 
           C'INCLUDE=(101,4,ZD,EQ,',101,4,')')), 
  TRAILER1=(3:'OUTFIL FNAMES=NGRP',101,4,',SAVE') 
 
  OUTFIL FNAMES=DDNAMES,REMOVECC,NODETAIL,BUILD=(80X), 
  INCLUDE=(101,4,ZD,LT,1000), 
  SECTIONS=(101,4, 
  TRAILER3=('//OUTF',101,4,' DD ', 
            'DISP=SHR,DSN=Your.Split.PDSE(OUTF',101,4,')')), 
  TRAILER1=('//NGRP',101,4,' DD ', 
            'DSN=HLQ.TONYCLD.NGRP',101,4,','/, 
            '//',15:'DISP=(NEW,CATLG,DELETE),',/, 
            '//',15:'SPACE=(CYL,(100,40),RLSE)',/, 
            '//*') 
//*
//*********************************************************************
//*  SUBMIT THE SPLIT JOB TO INTRDR WITH THE ABOVE OUTPUT             *
//*********************************************************************
//STEP0200 EXEC  PGM=SORT,COND=(4,EQ,STEP0100) 
//SYSOUT   DD SYSOUT=* 
//SYSIN    DD * 
   OPTION COPY 
//*SORTOUT  DD SYSOUT=(*,INTRDR),RECFM=FB 
//SORTOUT  DD SYSOUT=* 
//SORTIN   DD DATA,DLM=$$ 
//SPLTTONY JOB (DA26,001,098,J69),'TONY', 
//             CLASS=A, 
//             MSGCLASS=H, 
//             MSGLEVEL=(1,1), 
//             TIME=(,15), 
//             NOTIFY=USERID 
//* 
//SPLTSTEP EXEC PGM=SORT,REGION=0M 
//SYSOUT   DD SYSOUT=* 
//SORTIN   DD DISP=SHR,DSN=Your Input FB 100 Byte file
$$ 
//         DD DSN=&D,DISP=(OLD,PASS) 
//         DD DATA,DLM=$$ 
//SYSIN    DD * 
  OPTION COPY,ODMAXBF=100K 
  OUTREC IFTHEN=(WHEN=GROUP,KEYBEGIN=(1,44),PUSH=(101:ID=4))
$$ 
//         DD DSN=&C,DISP=(OLD,PASS)
//*
 
Further if you have any questions please let me know

Thanks,
Kolusu
DFSORT Development
IBM Corporation

IBM Mainframe Discussion List <[email protected]> wrote on 
08/20/2014 07:34:48 AM:

> From: TonyIcloud-OPERA <[email protected]>
> To: [email protected]
> Date: 08/20/2014 07:35 AM
> Subject: DF/SORT question (challenge?)
> Sent by: IBM Mainframe Discussion List <[email protected]>
> 
> I have a dataset that contains records with a field, by which I need to 
> create a separate dataset that would contain all occurrences of that 
> field. For example the file, FB100, looks like
> 
> value1 other data.....
> value1 other data.....
> value1 other data.....
> value2 other data.....
> value2 other data.....
> value2 other data.....
> value3 other data.....
> value3 other data.....
> value3 other data.....
> value4 other data.....
> value4 other data.....
> value4 other data.....
> 
> My final product must be a series of datasets:
> 
> hlq.value1.records
> hlq.value2.records
> hlq.value3.records
> hlq.value4.records
> 
> There may be hundreds/thousands of possible values, hence 
> hundreds/thousands of datasets.  I have accomplished this in 3 phases, 
> first pass reads the data, uses ICETOOL OCCUR to list the values, second 
 
> phase reads the OUTPUT and formats DD statements and OUTFIL OUTREC 
> statements, the third phase reads the original data to create the 
numerous 
> output files.  I used a newly created PDSE as the output file whereupon 
> the third phase created several thousand members.
> 
> It works, after a fashion, but I'd like a more simple solution.
> 
> 
> ----------------------------------------------------------------------
> For IBM-MAIN subscribe / signoff / archive access instructions,
> send email to [email protected] with the message: INFO IBM-MAIN
> 

----------------------------------------------------------------------
For IBM-MAIN subscribe / signoff / archive access instructions,
send email to [email protected] with the message: INFO IBM-MAIN

Reply via email to