Portal | Manuals | References | Downloads | Info | Programs | JCLs | Master the Mainframes
IBM Mainframe Computers Forums Index
 
Register
 
IBM Mainframe Computers Forums Index Mainframe: Search IBM Mainframe Forum: FAQ Memberlist Usergroups Profile Log in to check your private messages Log in
 

 

Syncsort - Calculate frequency percentage report

 
Post new topic   Reply to topic    IBMMAINFRAMES.com Support Forums -> JCL & VSAM
View previous topic :: :: View next topic  
Author Message
Francisco javier Niño

New User


Joined: 28 Mar 2008
Posts: 7
Location: Chile

PostPosted: Mon Nov 10, 2008 7:07 pm    Post subject: Syncsort - Calculate frequency percentage report
Reply with quote

Hi,

I have the following problem. My input file that looks like this (Recfm=FB, Lrecl=16)
Code:
4/BI        4/BI              2/AN         4/BI            2/BI             
(1-4)       (5-8)             (9-10)       (11-14)         (15-16)           
1---------- 2---------------- 3----------- 4-------------- 5----------------
     155773                 0 AF                   1230206                 8
     155773                 0 AA                   1973174                 0
     155773          53897628 AF                   1240000                 1
     155773          74527143 AF                   9201471                 0
     155773         123640073 AF                   1229200                 2
     155773         123640073 AA                   2970144                 0
     155773         123640073 AF                   1254200                15
     155773         123640073 AA                   2970144                 0
     155773         123640073 AF                   1348810                 1
     155773         123640073 AF                   1230206                24
     155773         123640073 AF                   1672219                 4
     169577                 0 AF                   1211870                 0
     169577                 0 AF                   1391259                 0
     169577          53897628 AF                   1211870                 1
     169577         473182442 AF                   1211870                 2
     169577         473182442 AF                   1230206                 2
     169577         473182442 AF                   1415525                 2
     189554                 0 AF                   3182310                 1
     189554                 0 AG                   3321860                 1
     189554          53897628 AF                   1240000                 1
     189554         299348394 AF                   1240000                15
     189554         299348394 AA                   3988261                 0
     189554         299348394 AA                   3970665                 0
     189554         299348394 AA                   1235080                 0
     189554         299348394 AA                   2905991                 0
     189554         299348394 AF                   3991532                11
     189554         299348394 AF                   3980206                 3
     196322                 0 AG                   1986642                 2
     196322          53897628 00                   1240000                 1


I want to obtain the frequency of each code in the column 3. I'm able to calculate how many time one code is present in the file but I'd like to calculate the percentage of this frequency from the total amount of records. This is the code I have now:
Code:
//RPRTDBID EXEC PGM=SYNCSORT                               
//SYSPRINT DD SYSOUT=*                                     
//SRTMSG   DD SYSOUT=*                                     
//SYSOUT   DD SYSOUT=*                                     
//SORTIN   DD DISP=SHR,DSN=...
//RPTDBID  DD DSN=...
//            DISP=(NEW,CATLG,DELETE),                     
//            SPACE=(TRK,(5,5),RLSE),                     
//            DCB=(LRECL=80,BLKSIZE=0,RECFM=FB)           
//SYSIN    DD *                                           
SORT   FIELDS=(1,2,CH,A)                                             
SUM    FIELDS=(3,4,PD)                                               
INREC  FIELDS=(1:9,2,                                               
               3:X'0000001C')                                       
OUTFIL FNAMES=RPTDBID,REMOVECC,                                     
    HEADER1=(1:' CODE ',7:' DESCRIPTION',68:' COUNT',78:'%  ',/,     
              1:80C'-'),                                             
OUTREC=(3:1,2,                                                       
        7:1,2,CHANGE=(60,                                           
C'AA',C'DESCRIPTION 1 ',
C'AF',C'DESCRIPTION 2 ',
C'AG',C'DESCRIPTION 4'),
NOMATCH=(C'NO DESCRIPTION AVALIABLE'),   
       67:3,4,PD,EDZ9=(ZZZ,ZZ9),                           
       78:C' 0%'),                                         
    TRAILER1=(1:80C'-',/,7:'TOTAL RECORDS FOUND:',         
              67:TOT=(3,4,PD,EDZ9=(ZZZ,ZZ9)))             

This is the result obtained:
Code:
 CODE  DESCRIPTION                                                  COUNT    % 
--------------------------------------------------------------------------------
  AA  DESCRIPTION 1                                                     7     0%
  AF  DESCRIPTION 2                                                    19     0%
  AG  DESCRIPTION 4                                                     2     0%
  00  NO DESCRIPTION AVALIABLE                                          1     0%
--------------------------------------------------------------------------------
      TOTAL RECORDS FOUND:                                             29       

The result I want is the following:
Code:
 CODE  DESCRIPTION                                                  COUNT    % 
--------------------------------------------------------------------------------
  AA  DESCRIPTION 1                                                     7 24.14%
  AF  DESCRIPTION 2                                                    19 65.52%
  AG  DESCRIPTION 4                                                     2  6.90%
  00  NO DESCRIPTION AVALIABLE                                          1  3.45%
--------------------------------------------------------------------------------
      TOTAL RECORDS FOUND:                                             29


I'd like to do it using syncsort but if it's not possible I can use DFSORT/ICETOOL too.
Back to top
View user's profile Send private message

dick scherrer

Site Director


Joined: 23 Nov 2006
Posts: 19270
Location: Inside the Matrix

PostPosted: Mon Nov 10, 2008 10:37 pm    Post subject:
Reply with quote

Hello Francisco and welcome to the forum,

Does your system have both Syncsort and DFSORT installed/available?

Most systems do not. . .
Back to top
View user's profile Send private message
Francisco javier Niño

New User


Joined: 28 Mar 2008
Posts: 7
Location: Chile

PostPosted: Tue Nov 11, 2008 12:08 am    Post subject:
Reply with quote

Hi dick, thanks for the welcome.
Yes, we have both installed but we are trying to replace all uses of DFSORT with syncsort whenever it is possible.
Back to top
View user's profile Send private message
Arun Raj

Moderator


Joined: 17 Oct 2006
Posts: 2284
Location: @my desk

PostPosted: Tue Nov 11, 2008 1:26 am    Post subject:
Reply with quote

Quote:
I'd like to do it using syncsort

Hello Francisco,

Here's one way of doing this using Syncsort. Please note that the decimal places are not getting rounded as shown in your output.

Code:
//STEP01  EXEC PGM=SORT                                               
//SYSOUT    DD SYSOUT=*                                               
//T1        DD DSN=&&T1,DISP=(,PASS)                                 
//C1        DD DSN=&&C1,DISP=(,PASS)                                 
//SORTIN    DD DSN= Input file ----  FB,LRECL=16                     
//SYSIN     DD *                                                     
 INREC IFTHEN=(WHEN=(9,2,CH,EQ,C'AA'),OVERLAY=(17:C'DESCRIPTION 1 ')),
       IFTHEN=(WHEN=(9,2,CH,EQ,C'AF'),OVERLAY=(17:C'DESCRIPTION 2 ')),
       IFTHEN=(WHEN=(9,2,CH,EQ,C'AG'),OVERLAY=(17:C'DESCRIPTION 4 ')),
       IFTHEN=(WHEN=NONE,OVERLAY=(17:C'NO DESCRIPTION AVALIABLE')),   
       IFOUTLEN=80                                                   
 SORT FIELDS=(9,2,CH,A)                                               
 OUTFIL FNAMES=T1,REMOVECC,NODETAIL,                                 
      HEADER1=(1:' CODE ',7:' DESCRIPTION',68:' COUNT',78:'%  ',/,   
                1:80C'-'),                                           
      SECTIONS=(9,2,TRAILER3=(3:9,2,7:17,24,67:COUNT=(EDIT=(III,IIT)),
               79:C'X%')),                                           
      TRAILER1=(1:80C'-',/,7:'TOTAL RECORDS FOUND:',                 
               67:COUNT=(EDIT=(III,IIT)),80:X)                       
 OUTFIL FNAMES=C1,REMOVECC,NODETAIL,                                 
      TRAILER1=(C'TOT,+',COUNT=(M11,LENGTH=8),80:X)                   
//STEP02  EXEC PGM=SORT                                     
//SYSOUT    DD SYSOUT=*                                     
//RPTDBID   DD SYSOUT=*                                     
//SYMNAMES  DD DSN=&&C1,DISP=(OLD,PASS)                     
//SORTIN    DD DSN=&&T1,DISP=(OLD,PASS)                     
//SYSIN     DD *                                             
 INREC IFTHEN=(WHEN=(79,1,CH,EQ,C'X'),                       
       OVERLAY=(75:67,7,UFF,MUL,+10000,DIV,TOT,M18,LENGTH=5))
 OPTION COPY                                                 
 OUTFIL FNAMES=RPTDBID                                       
/*

RPTDBID
Code:
 CODE  DESCRIPTION                                                  COUNT    %
--------------------------------------------------------------------------------
  AA  DESCRIPTION 1                                                     7 24.13%
  AF  DESCRIPTION 2                                                    19 65.51%
  AG  DESCRIPTION 4                                                     2  6.89%
  00  NO DESCRIPTION AVALIABLE                                          1  3.44%
--------------------------------------------------------------------------------
      TOTAL RECORDS FOUND:                                             29
Back to top
View user's profile Send private message
Francisco javier Niño

New User


Joined: 28 Mar 2008
Posts: 7
Location: Chile

PostPosted: Tue Nov 11, 2008 10:01 pm    Post subject:
Reply with quote

Hey arcvns,

That was awesome, it works like a charm. Now I'm working to understand every little detail on your solution (read,try,error,loop,read,try,....).

Thanks again four your quick and helpful answer.
Back to top
View user's profile Send private message
Arun Raj

Moderator


Joined: 17 Oct 2006
Posts: 2284
Location: @my desk

PostPosted: Tue Nov 11, 2008 10:12 pm    Post subject:
Reply with quote

Francisco,

You're welcome. Good to hear that I could be of some help to you icon_smile.gif . Goodluck
Back to top
View user's profile Send private message
Alissa Margulies

SYNCSORT Support


Joined: 25 Jul 2007
Posts: 500
Location: USA

PostPosted: Thu Nov 13, 2008 1:14 am    Post subject:
Reply with quote

Francisco,

I have modified Arun's application so it can be done in a single pass of the data. This job requires SyncSort for z/OS 1.3. Give it a try if you'd like:
Code:
//STEP1  EXEC PGM=SORT                                 
//SORTIN   DD DSN=INPUT.DATA                   
//SORTOUT  DD DSN=OUTPUT.DATA
//SYSOUT   DD SYSOUT=*                                       
//SYSIN    DD *                                             
   INREC IFTHEN=(WHEN=INIT,                                   
     BUILD=(1,2,C'TOT',SEQNUM,05,ZD,20C'0')),             
     IFTHEN=(WHEN=(1,2,CH,EQ,C'AA'),                     
     OVERLAY=(11:SEQNUM,05,ZD)),                         
     IFTHEN=(WHEN=(1,2,CH,EQ,C'AF'),                     
     OVERLAY=(16:SEQNUM,05,ZD)),                         
     IFTHEN=(WHEN=(1,2,CH,EQ,C'AG'),                     
     OVERLAY=(21:SEQNUM,05,ZD)),                         
     IFTHEN=(WHEN=NONE,                                   
     OVERLAY=(26:SEQNUM,05,ZD))                           
   SORT FIELDS=(3,1,CH,A)                                   
   DUPKEYS MAX=(6,5,ZD,11,5,ZD,16,5,ZD,21,5,ZD,26,5,ZD)     
   OUTREC FIELDS=(1,30,                                     
     (+10000,MUL,11,5,ZD),DIV,6,5,ZD,EDIT=(TT.TT),     
     (+10000,MUL,16,5,ZD),DIV,6,5,ZD,EDIT=(TT.TT),     
     (+10000,MUL,21,5,ZD),DIV,6,5,ZD,EDIT=(TT.TT),     
     (+10000,MUL,26,5,ZD),DIV,6,5,ZD,EDIT=(TT.TT),     
     80:C' ')                                         
   OUTFIL OUTREC=(1:C'CODE  DESCRIPTION',50:C'COUNT    %',         
     80:C' ',/,1:80C'-',/,                               
      3:C'AA',7:C'DESCRIPTION 1',50:11,5,ZD,EDIT=(IIIIT),
     57:31,5,62:C'%',80:C' ',/,                         
      3:C'AF',7:C'DESCRIPTION 2',50:16,5,ZD,EDIT=(IIIIT),
     57:36,5,62:C'%',80:C' ',/,                         
      3:C'AG',7:C'DESCRIPTION 3',50:21,5,ZD,EDIT=(IIIIT),
     57:41,5,62:C'%',80:C' ',/,                         
      3:C'00',7:C'NO DESCRIPTION AVAILABLE',             
     50:26,5,ZD,EDIT=(IIIIT),57:46,5,62:C'%',80:C' ',/, 
      1:80C'-',/,7:C'TOTAL RECORDS FOUND:',               
     50:11,5,ZD,EDIT=(IIIIT),80:C' ')                   
   END                                                     
/*
Back to top
View user's profile Send private message
View previous topic :: :: View next topic  
Post new topic   Reply to topic    IBMMAINFRAMES.com Support Forums -> JCL & VSAM All times are GMT + 6 Hours
Page 1 of 1

 

Search our Forum:

Similar Topics
Topic Author Forum Replies Posted
No new posts Wanted to calculate TRK when i have B... Balu5491 JCL & VSAM 8 Wed Jul 19, 2017 5:43 pm
No new posts Report cost in CA-dispatch Nileshkul CA Products 3 Wed Jun 07, 2017 10:32 pm
No new posts Splitting of single report to seperat... abdulrafi TSO/ISPF 7 Mon Mar 27, 2017 3:59 pm
No new posts Easytrieve report shalem CA Products 4 Sun Feb 26, 2017 9:08 am
No new posts SYNCSORT SEQNUM and FI fields. nartcr SYNCSORT 7 Sat Jan 21, 2017 4:02 am


Facebook
Back to Top
 
Mainframe Wiki | Forum Rules | Bookmarks | Subscriptions | FAQ | Tutorials | Contact Us