Symbolic parameters in JCL using SET statement

Symbolic parameters used in JCL can be assigned a value using the SET statement.

//      SET INFILE=MY.DATA.SET.HERE

You can also give an eight character (upto 8 char) name to this statement.

//MYVARS SET INFILE=MY.DATA.SET.HERE

Multiple variables can be defined in a SET statement – separated by comma.

//MYVARS SET INFILE1=MY.DATA.SET.HERE,PARM1='KARTHIK'

Learn more

Sort-card to split a file into multiple files (OUTFIL,FNAMES,SAVE)

Let’s say we have a file with first byte having 2 different values ‘A’ or ‘B’ or any other character.
We are going to create a file with all records starting with A (DD name SORTXXA), a second file with all records starting with B (DD name SORTXXB), a third file (DD name SORTXXX) with remaining records.

 SORT FIELDS=COPY
 OUTFIL FNAMES=SORTXXA,INCLUDE=(1,1,CH,EQ,C'A')
 OUTFIL FNAMES=SORTXXB,INCLUDE=(1,1,CH,EQ,C'B')
 OUTFIL FNAMES=SORTXXX,SAVE

SYMNAMES in SORT

SYMNAMES is a means of defining variables in SORT. When you have a complex sortcard, it becomes hard to have your sort control card ‘readable / understandable’. It is a good practice to always use SYSNAMES DD to define variables and then use the logical variable names in Sort card.

Below is an example with the SYMNAMES DD (variables declared) and SYSIN (the ‘sort control card’).

//SORTSTEP  EXEC PGM=SORT
//SYSOUT   DD SYSOUT=*
//SORTIN   DD DISP=SHR,
//            DSN=MYDSN.NAME
//SORTWK01 DD UNIT=SYSDA,SPACE=(CYL,2000)
//SORTWK02 DD UNIT=SYSDA,SPACE=(CYL,2000)
//SORTWK03 DD UNIT=SYSDA,SPACE=(CYL,2000)
//SYMNAMES DD *
 Name,1,10,CH
 Age,11,2,ZD
/*
//SYSIN    DD *
 SORT FIELDS=(Age,D)
 INCLUDE FILEDS=(Age,GT,25)
/*
//SORTOUT  DD DISP=(NEW,CATLG,DELETE),
//            SPACE=(CYL,(250,100),RLSE),
//            UNIT=DISK,
//            DCB=(RECFM=FB,LRECL=80,BLKSIZE=0),
//            DSN=MYDSN.OUTPUT.NAME

read more on SYMNAMES

Site statistics (2-Oct-2010 to 2-Oct-2011)

site statistics

Update / RE WRITE VSAM file in Easytrieve

Updating/ REWRITING a VSAM record:
VSAM declaration should look like,

 FILE FILE2 VS UPDATE

FILE2 is the DD name – must have DISP=OLD

Reading VSAM file by Key and updating the record

----+----1----+----2----+----3----+----4----+----5----+----6----+----7--
 LIST ON
 FILE FILE1 FB(80 200)
   IN-REC 1 80 A
   IN-KEY 1 8 A
 FILE FILE2 VS UPDATE
   F2-REC 1 18 A
   F2-KEY 1 8 A
   F2-VALUE 9 10 N
 JOB INPUT NULL
 GET FILE1
 DO WHILE NOT EOF FILE1
   READ FILE2 KEY IN-KEY STATUS
   IF FILE2 : FILE-STATUS EQ 0
      F2-VALUE = F2-VALUE + 5
      WRITE FILE2 UPDATE
   ELSE
      DISPLAY IN-KEY ' NOT PRESENT IN VSAM FILE'
   END-IF
   GET INFILE
 END-DO
 STOP

IBM SORT – Add a trailer record with Record Count

//STEP010 EXEC PGM=SORT
//SORTIN DD DISP=SHR,DSN=my.file
//SORTOUT DD DISP=(,CATLG,DELETE),
//DSN=new.file,
//LIKE=my.file
//SYSIN DD *
 SORT FIELDS=COPY
 OUTFIL REMOVECC,
 TRAILER1=(C'COUNT:',COUNT-1=(EDIT=(TTTTTTTT)))
/*

IDCAMS – Delete a VSAM file using JCL

Delete a VSAM file (Cluster):

//STEP01 EXEC PGM=IDCAMS
//SYSPRINT DD SYSOUT=*
//SYSIN DD *
 DELETE my.vsam.file CLUSTER
/*

IDCAMS – Create and delete GDG base using JCL

IDCAMS Utility can be used to create a GDG base, as well as deleting an existing base.
Define a GDG base:

//STEP01 EXEC PGM=IDCAMS
//SYSPRINT DD SYSOUT=*
//SYSIN DD *
 DEFINE GENERATIONDATAGROUP (NAME(gdg.base) -
 NOEMPTY SCRATCH LIMIT(4))
/*

Delete/Purge a GDG base:

//STEP01 EXEC PGM=IDCAMS
//SYSPRINT DD SYSOUT=*
//SYSIN DD *
 DELETE gdg.base PURGE
/*

ICETOOL Count

Below step will get the number of records present in IN1 and IN2 files. The counts will be displayed in TOOLMSG DD. This will come handy, when you need to get count of big files and you have so many files to check the count.

//STEP01 EXEC PGM=ICETOOL
//DFSMSG DD SYSOUT=*
//TOOLMSG DD SYSOUT=*
//SYSOUT DD SYSOUT=*
//SYSPRINT DD SYSOUT=*
//IN1 DD DSN=MY.DSN.ONE,DISP=SHR
//IN2 DD DSN=MY.DSN.TWO,DISP=SHR
//TOOLIN DD *
 COUNT FROM(IN1)
 COUNT FROM(IN2)

SAS links

SAS PDF

SAS Sample programs

SAS Functions by example (book)

SAS for Dummies (Zip file)

SAS language reference