Date: Thu, 13 Apr 2000 11:32:04 -0600
Reply-To: jerry Durbin <Jerry_Durbin@BC.COM>
Sender: "SAS(r) Discussion" <SAS-L@LISTSERV.UGA.EDU>
From: jerry Durbin <Jerry_Durbin@BC.COM>
Subject: Re: Why 2 tape mounts for each tape?
Content-Type: text/plain; charset="iso-8859-1"
Thank you for the info on the SAS read. It's interesting that when I use
JCL to specify the tape DSNs, the tapes are only mounted once with only disp
& dsn specified (watching the Jes log to see the actual mounts) but when
used in libname's they are mounted twice. Using only the UNIT=AFF= I can
force the tapes to a single drive 1 at a time, but have to read them each in
as separate data steps & then combine them in a new data step - more
efficient for operational tape mounts, but not necessarily for sas
coding..... It was appearing to me that the libname statement mounted the
tape & then perhaps the set wanted another re-mount of the tape as you
mentioned in the double read.
What I was attempting to do was make the sas code versatile in how many
tapes could be read in based upon some variable supplied via sysparm(), but
not trash the operators by using all the tape drives multiple times. i.e.,
sometimes this code needs to call in from 2 - 30 tape gdg's based upon the
amount of historical data desired and I was trying to be efficient for some
> -----Original Message-----
> From: Dennis Diskin [SMTP:Dennis.Diskin.B@BAYER.COM]
> Sent: Thursday, April 13, 2000 7:01 AM
> To: SAS-L@VM.MARIST.EDU
> Subject: Re: Why 2 tape mounts for each tape?
> I think the problem with 2 mounts is caused by SAS having to open all the
> members in the SET statement at compile time in order to determine what
> variables are in each member and what their attributes are.
> SAS then closes the libraries and reopens them to read the data.
> You can avoid the second mount message by adding the RETAIN parameter in
> JCL (see your Fine Manual titled JCL).
> If you try to use the UNIT=AFF to reuse the same tape drive with the SAS
> as given, I believe you will abend due to the above.
> The only simple way I can think of to get around this would be to read
> tape into a work file and then SET them together.
> In that approach, the UNIT=AFF and RETAIN together should result in one
> drive and only two mounts.
> If they are VERY large, it might be worth woring on it further.
> Dennis Diskin
> /C=us"@X400@VM.MARIST.EDU/P=Internet/A= /C=us" on 04/12/2000 01:05:33 PM
> Please respond to "DDA.RFC-822=Jerry_Durbin@BC.COM/P=Internet/A=
> Sent by: "DDA.RFC-822=SAS-L@VM.MARIST.EDU/P=Internet/A= /C=us"
> To: "DDA.RFC-822=SAS-L@VM.MARIST.EDU/P=Internet/A= /C=us"@X400
> Subject: Why 2 tape mounts for each tape?
> Hello list!
> I have some code that I am attempting to "tune" and have noticed that with
> the code below, for each tape, the MVS system actually does 2 tape mounts.
> What must I do to have the code only mount the tapes once? Additionally,
> I'd like all the tapes to use the same drive after each tape has been
> i.e., UNIT=AFF=<ddname> in JCL parlance such as this sample:
> //GET2CURR DD DISP=SHR,DSN=BCISACCT.B031011.BILLING.CICSMTD(0) Disk
> //GETTAPE1 DD DISP=SHR,DSN=BCISACCT.B031011.BILLING.CICSBILL(0) Tape
> //GETTAPE2 DD DISP=SHR,UNIT=AFF=GETTAPE1,
> // DSN=BCISACCT.B031011.BILLING.CICSBILL(-1) Tape
> , but I would rather not use JCL in this case. I would gladly try looking
> for the answer via Reading Those Fine Manuals, but have none at hand to do
> so, I am asking the list for suggestions.
> DATA SELT09;
> libname GET2CURR 'BCISACCT.B031011.BILLING.CICSMTD(0)'
> disp=shr ;
> libname GETTAPE1 'BCISACCT.B031011.BILLING.CICSBILL(0)'
> disp=shr ; /* Tape 1 */
> libname GETTAPE2 'BCISACCT.B031011.BILLING.CICSBILL(-1)'
> disp=shr ; /* Tape 2 */
> SET GET2CURR.DAILYSUM end=eof
> GETTAPE1.DAILYSUM end=eof
> GETTAPE2.DAILYSUM end=eof
> PROGRAM = UMSUM1;
> GROUP = SUBSTR(PROGRAM,1,5);
> RETAIN HIDATE;
> FORMAT HIDATE DATE. ;
> FORMAT DATE MMDDYY10. ;
> DROP HIDATE;
> DATE = RUNDATE ;
> TIME = RTIME ;
> IF RUNDATE > HIDATE THEN HIDATE = RUNDATE;
> IF MNSEGSYS =: 'CICS ' THEN MNSEGSYS = 'CICSP00'
> if TRAN =: 'UD' or
> TRAN =: 'DM' or
> TRAN =: 'FR' THEN OUTPUT SELT09;
> else Delete ;
> run ;
> Thank You in advance for your suggestions!