Not sure if this is still relavant but I used it in the late 80's
I believe IDCAMS can be run interactively so you can
wrap it in macro, or you can create a JCL proc with an argument
Untested proc
HERE IS A PROC WITH THREE PARAMETERS
//*
//* PROC PARAMETERS
//* STATE IS STATE TO PROCESS
//* PRIOR IS STATE TO STACK THIS ONE BEHIND
//* FILE IS FILE SEQUENCE NUMBER
//*
//* NOTE: - FIRST STATE HAS STARTING VOLSERS CODED AS OVERRIDE
//*
//MAT PROC DATE=DEC87
//UNCATLG EXEC PGM=IEFBR14
//DUM DD UNIT=(CART,,DEFER)
// DD UNIT=AFF=DUM,DISP=(MOD,UNCATLG),
// DSN=XXXXXXX.M12.M703.FULL.&STATE..&DATE
// DD UNIT=AFF=DUM,DISP=(MOD,UNCATLG),
// DSN=XXXXXXX.M12.M703.STRIP.&STATE..&DATE
//*
//MATCH EXEC PGM=YYYY532
//SYSPRINT DD SYSOUT=*
//SYSOUT DD SYSOUT=*
//IDQ11521 DD DSN=XXX.XXX.STIDFILE,DISP=SHR
//IDQ11522 DD DSN=XXX.XXXZIPSTAT,DISP=SHR
//SORTWK01 DD UNIT=SYSDA,SPACE=(CYL,(100,25))
//SORTWK02 DD UNIT=SYSDA,SPACE=(CYL,(100,25))
//SORTWK03 DD UNIT=SYSDA,SPACE=(CYL,(100,25))
//SORTWK04 DD UNIT=SYSDA,SPACE=(CYL,(100,25))
//SORTWK05 DD UNIT=SYSDA,SPACE=(CYL,(100,25))
//SORTWK06 DD UNIT=SYSDA,SPACE=(CYL,(100,25))
//SORTWK07 DD UNIT=SYSDA,SPACE=(CYL,(100,25))
//SORTWK08 DD UNIT=SYSDA,SPACE=(CYL,(100,25))
//SORTWK09 DD UNIT=SYSDA,SPACE=(CYL,(100,25))
//SORTWK10 DD UNIT=SYSDA,SPACE=(CYL,(100,25))
//OUT DD UNIT=CARTX,
// DCB=(LRECL=532,RECFM=FB,BLKSIZE=32452,TRTCH=COMP),
// DISP=(,CATLG),
// LABEL=&FILE,
// VOL=(,RETAIN,,99,
// REF=XXXXXXX.M12.M703.FULL.&PRIOR..&DATE),
// DSN=XXXXXXX.M12.M703.FULL.&STATE..&DATE
//STRIP DD UNIT=CARTX,
// DCB=(LRECL=144,RECFM=FB,BLKSIZE=32688,TRTCH=COMP),
// DISP=(,CATLG),
// LABEL=&FILE,
// VOL=(,RETAIN,,99,
// REF=XXXXXXX.M12.M703.STRIP.&PRIOR..&DATE),
// DSN=XXXXXXX.M12.M703.STRIP.&STATE..&DATE
//LONG DD DISP=(MOD,CATLG),DCB=(LRECL=532,RECFM=FB,BLKSIZE=27664),
// SPACE=(CYL,(10,10),RLSE),UNIT=SYSDA,
// DSN=XXXXXXX.MAR97.LONG.ADDRESS.RECORDS
//IN DD DISP=OLD,DSN=YYYY0397.S0400.XXXS04.STATE&STATE,
// DCB=TRTCH=COMP
// PEND
//*
//* PROC PARAMETERS
//* STATE IS STATE TO PROCESS
//* PRIOR IS STATE TO STACK THIS ONE BEHIND
//* FILE IS FILE SEQUENCE NUMBER
//*
//* NOTE: - FIRST STATE HAS STARTING VOLSERS CODED AS OVERRIDE
//*
//MA EXEC MAT,STATE=MA,FILE=01,
// PRIOR=NONE
//MATCH.OUT DD VOL=(,RETAIN,,99) FULL STARTING VOLSER
//STRIP DD VOL=(,RETAIN,,99) STRIP STARTING VOLSER
//*
//RI EXEC MAT,STATE=RI,FILE=02,PRIOR=MA
//NH EXEC MAT,STATE=NH,FILE=03,PRIOR=RI
//ME EXEC MAT,STATE=ME,FILE=04,PRIOR=NH
//VT EXEC MAT,STATE=VT,FILE=05,PRIOR=ME
//CT EXEC MAT,STATE=CT,FILE=06,PRIOR=VT
//NJ EXEC MAT,STATE=NJ,FILE=07,PRIOR=CT
//NY EXEC MAT,STATE=NY,FILE=08,PRIOR=NJ
//PA EXEC MAT,STATE=PA,FILE=09,PRIOR=NY
//DE EXEC MAT,STATE=DE,FILE=10,PRIOR=PA
//DC EXEC MAT,STATE=DC,FILE=11,PRIOR=DE
It is possible to eliminate JCL entirely and run using
old text editor. You run 'interactive' batch
that can communicate with a master interactive SAS.
I found this very usefull back in the 80s, although IT hated it.
Here is some info (somewhat incomplete) on 'interactive' MVS batch.
%MACRO UTLTSO(STATE)
/ des="Bring up TSO batch xeq SAS and SAS objects";
/*-------------------------------------*\
| |
| This is some really old code circa |
| 1988 |
| |
| The pupose of this utility was to |
| run a second SAS MVS 'interactive' |
| batch session while in old text |
| editor. No JCL. |
| |
| I used to use this code to do |
| some tasks batch while I was doing |
| other things in display manager. |
| |
| You may ask why: |
| |
| 1. A JCL oriented MVS batch |
| environment is quite different |
| from other batch environments |
| ie Unix, OS/2, WinNT etc. |
| This utility gives the user |
| some of the properties of MVS |
| batch, ie batch queues, good |
| mutiprogamming, time and |
| storage limits etc. |
| |
| 2. No JCL needed |
| |
| 3. All TSO utilities like IEBCOPY, |
| IDCAMS available with |
| IEBGENER available with |
| SAS 'X' command. No JCL. |
| Also things like LISTDS |
| |
| 4. Programs run exactly the same |
| in true interactive or |
| interactive batch |
| |
| 5. Some SAS interactive commands |
| are available in 'interactive' |
| batch. |
| |
| |
| Inputs |
| ====== |
| |
| 1. A member UTLPRTX in PDS |
| XLR82SAS.UTL(UTLPRTX) |
| |
| |
| %UTLPRTX |
| ( |
| UIN=XLR2SAS.UTL.SDL, |
| UMEM=SASCOBOL, |
| UPRN=NO, |
| UOT=XLR82SAS.UTL.&UTLTSO.PRT, |
| UFLOP=05.06.07 |
| ); |
| |
| 2. You may want to customize the |
| config and autoexec files for |
| communication between the two |
| interactive SAS sessions. |
| |
| |
| Process |
| ======= |
| |
| In an active display manager |
| submit the following code |
| |
| %utltso(utlprtx); |
| |
| What happens: |
| |
| 1. UTLTSO is located in |
| the current autocall |
| library |
| |
| 2. SAS dynamically creates |
| MVS JCL and submits the JCL |
| the appropriate batch que. |
| (using the internal reader) |
| |
| 3. MVS brings up a TSO session |
| in batch mode. |
| |
| 4. The Batch TSO session executes|
| the SAS clist. |
| |
| A. SASTSO is the name of |
| the CLIST. |
| |
| B. The Clist communicates |
| with the interactive |
| session through |
| |
| 5. Job runs. |
| |
| |
| OUTPUT |
| ======= |
| |
| XLR82SAS.UTL.UTLPRTX.PRT |
| |
|=======================================|
| |
| |
\*-------------------------------------*/
FILENAME OUTRDR SYSOUT=A PGM=INTRDR RECFM=FB LRECL=80;
DATA _NULL_;
LENGTH J1-J8 $72.;
FILE OUTRDR NOPRINT NOTITLES;
J1="//XLR82SASW JOB (XXXXXXXX,XXXXXXX),MSGCLASS=X,CLASS=B,REGION=0M";
J2="//TSO EXEC PGM=IKJEFT01,REGION=16M,DYNAMNBR=30";
J3="//SYSTSPRT DD SYSOUT=*";
J4="//SYSPRINT DD SYSOUT=*";
J5="//SASUSR DD DSN=XLR82SAS.UTLTSO.SASUSER.SDL,DISP=OLD";
J6="//SASIN DD DISP=SHR,DSN=XLR82SAS.UTL(&STATE)";
J7="//SYSTSIN DD *";
J8="EX 'XLR82SAS.CLIST(SASTSO)'";
PUT (J1-J8) ($CHAR72. /);
RUN;
%MEND UTLTSO;
%utltso(state=FL);
%utltso(state=NY);
... View more