Page 1 of 1

prefix with quater and year

PostPosted: Mon Mar 30, 2015 3:11 pm
by David2k8
//Jobnaem JOB ,,REGION=0M,CLASS=A,MSGCLASS=Z,         
//             NOTIFY=&SYSUID                                     
//STEP1    EXEC PGM=SORT                                           
//SYMNAMES DD *                                                   
  YR4,S'&YR4'             -- Gives year 4 'YYYY'bytes                                                     
  MON,S'&MON'           -- Gives MONTH in number'01'  for JAN and so on
//SORTIN   DD *                                                   
[b]Q#YYYY_RECORD    [/b]                                                 
//SYSOUT   DD SYSOUT=*                                             
//SORTOUT  DD SYSOUT=*                                             
//SYSIN    DD *                                                   
  OPTION COPY                                                     
  INREC OVERLAY=(3:YR4,16:MON)                                     
  OUTREC IFTHEN=(WHEN=(16,2,ZD,GE,1,&,16,2,ZD,LE,3),               
         OVERLAY=(2:C'1',16:2X)),                                 
         IFTHEN=(WHEN=(16,2,ZD,GE,4,&,16,2,ZD,LE,6),               
         OVERLAY=(2:C'2',16:2X)),                                 
         IFTHEN=(WHEN=(16,2,ZD,GE,7,&,16,2,ZD,LE,9),               
         OVERLAY=(2:C'3',16:2X)),                     
         IFTHEN=(WHEN=(16,2,ZD,GE,10,&,16,2,ZD,LE,12),
         OVERLAY=(2:C'4',16:2X))                       
/*   


Output : (run on march 2015)

Q12015_RECORD

Code'd

Re: prefix with quater and year

PostPosted: Mon Mar 30, 2015 7:02 pm
by Terry Heinze
In the future, please use Code tags for readability.

Re: prefix with quater and year

PostPosted: Mon Mar 30, 2015 8:46 pm
by BillyBoyo
You have coded a SYMNAMES DD, why not use it a bit more? Why no SYMNOUT DD. You've overcomplicated things with the IFTHENs. There is no need to "protect" against a previous hit on an IFTHEN=(WHEN=(logical-expression) because that first hit stops the processing for that record (to continue processing, you need to explicitly include HIT=NEXT).
//SYMNAMES DD *                                                   
  YR4,S'&YR4'             -- Gives year 4 'YYYY'bytes                                                     
  MON,S'&MON'           -- Gives MONTH in number'01'  for JAN and so on
  OVERLAID-YEAR,3,4,CH
  OVERLAID-QUARTER,2,1,CH
  APPENDED-MONTH,16,2,CH
  Q1,C'1'
  Q2,C'2'
  Q3,C'3'
  Q4,C'4'
  Q1-END,C'03'
  Q2-END,C'06'
  Q3-END,C'09'
  Q4-END,C'12'
//SYMNOUT  DD SYSOUT=*                                             
//SORTIN   DD *                                                   
Q#YYYY_RECORD                           
//SYSOUT   DD SYSOUT=*                                             
//SORTOUT  DD SYSOUT=*                                             
//SYSIN    DD *                                                   
  OPTION COPY                                                     
  INREC IFOUTLEN=16,
         IFTHEN=(WHEN=INIT,
                  OVERLAY=(OVERLAID-YEAR:YR4,APPENDED-MONTH:MON)),
         IFTHEN=(WHEN=(APPENDED-MONTH,LE,Q1-END),               
                  OVERLAY=(OVERLAID-QUARTER:Q1)),                                 
         IFTHEN=(WHEN=(APPENDED-MONTH,LE,Q2-END),               
                  OVERLAY=(OVERLAID-QUARTER:Q2)),                                 
         IFTHEN=(WHEN=(APPENDED-MONTH,LE,Q3-END),               
                  OVERLAY=(OVERLAID-QUARTER:Q3)),
         IFTHEN=(WHEN=(NONE),               
                  OVERLAY=(OVERLAID-QUARTER:Q4))


Something like that for you to try (untested).

It's best if you wait around to answer specific questions, rather than dumping code which worked for you before but which was never exposed to critique.

A better way to do it than the IFTHEN= is with CHANGE, so have a go at that if you like.