Sorting twice in same card

In this Mainframe Forum - You can post your queries on DFSORT, ICETOOL , SyncSort & JCL Utilities

Moderators: Frank Yaeger, Moderator Group

Post Reply
Captain Nero
Member
Posts: 10
Joined: Fri Jun 20, 2008 4:21 pm
Location: Kolkata, India

Sorting twice in same card

Post by Captain Nero » Tue Jun 24, 2008 10:36 am

I have a file which looks like -

|POL|SERVICING |CONVG |
|STS|AGENT |EFF DATE|
===============================
IL |A |021 |20080128|
MI |A |002 |20080110|
CT |A |036 |20080208|
CT |A |266 |20080117|
AK |A |723 |20080107|
NM |A |874 |20080107|
MD |A |876 |20080114|
CA |A |244 |20080102|
MA |A |499 |20080225|

The 361-362 colums hold the US state code. Now my requirement is to find out how many records are there for each state code. Ihave first used a control card like the following -

//SYSIN DD *
INREC FIELDS=(1,424,425:C'000001')
SORT FIELDS=(361,2,CH,A)
INCLUDE COND=(361,2,CH,NE,C' ',AND,361,2,CH,NE,C'==')
SUM FIELDS=(425,6),FORMAT=ZD
OUTREC FIELDS=(1:361,2,3:C' - ',6:425,6)

Here the output is coming in the following ways -

AK - 000001
AL - 000029
AR - 000013
AZ - 000032
CA - 000242
CO - 000028
CT - 000070

The output records are sorted in the alphabetical order of the state code. However, I wanted to see output in the ascending order of the number of occurence rather than the alphabetic order which came. I could not get it done as it requires two sorting in the single step.

Can anyone help me out with this requirement, I can not use more than one step, which is making the simple problem into a complex one. :shock:
Regards,
Captain N.

User avatar
Frank Yaeger
Moderator
Posts: 812
Joined: Sat Feb 18, 2006 5:45 am
Location: San Jose, CA
Contact:

Post by Frank Yaeger » Tue Jun 24, 2008 8:05 pm

Here's a one-step DFSORT/ICETOOL job that will do what you asked for:

Code: Select all

//S1    EXEC  PGM=ICETOOL
//TOOLMSG   DD  SYSOUT=*
//DFSMSG   DD  SYSOUT=*
//IN DD DSN=...  input file
//T1 DD DSN=&&T1,UNIT=SYSDA,SPACE=(CYL,(5,5)),DISP=(,PASS)
//OUT DD DSN=...  output file
//TOOLIN   DD    *
SORT FROM(IN) USING(CTL1)
SORT FROM(T1) TO(OUT) USING(CTL2)
/*
//CTL1CNTL DD *
   INCLUDE COND=(361,2,CH,NE,C' ',AND,361,2,CH,NE,C'==')
   INREC BUILD=(361,2,11:X)
   SORT FIELDS=(1,2,CH,A)
   OUTFIL FNAMES=T1,REMOVECC,NODETAIL,
     SECTIONS=(1,2,
       TRAILER3=(1,2,C' - ',COUNT=(M11,LENGTH=6)))
/*
//CTL2CNTL DD *
   SORT FIELDS=(6,6,ZD,A)
/*
Frank Yaeger - DFSORT Development Team (IBM) - yaeger@us.ibm.com
Specialties: JOINKEYS, FINDREP, WHEN=GROUP, ICETOOL, Symbols, Migration
=> DFSORT/MVS is on the Web at http://www.ibm.com/storage/dfsort

Post Reply

FREE TUTORIALS

Tutorials
Free tutorials from mainframegurukul
  • JCL Tutorial
    Covers all important JCL concepts.
  • Cobol Tutorial
    This tutorials covers all Cobol Topics from STRING to COMP-3.
  • DB2 Tutorial
    DB2 Tutorial focuses on DB2 COBOL Programming.
  • SORT Tutorial
    This Tutorial covers all important aspects of DFSORT with examples
  • CICS Tutorial
    This CICS tutorial covers CICS concepts and CICS Basics, CICS COBOL Programming.
Interview
Mainframe Interview questions



Other References
Mainframe Tools and others