In SAS 9.3, a system abend 0C7 occurs during processing of a member of a PDS (partitioned data set) that has non-ISPF (non-Interactive System Productivity Facility) information stored in the directory entry for the member. When you view the member list from ISPF, the statistics area is blank. You might see the following message in your SAS log:
The problem is caused by a change in SAS 9.3 that displays the Creation Date for the member if the statistics are in the member record. The change to SAS 9.3 was an attempt to display the Creation Date for the member if member statistics are found for the member. If there are no statistics for the member, SAS displays the Creation Date of the library instead. This field is checked only and thus the error occurs only for members processed with the INFILE statement or the FINFO function. Click the Full Code tab at the top of this note to see a macro that you can use to read and format all directory entries within a PDS. Entries that do not contain standard ISPF statistics will display the user area both in character and hexadecimal values.
For example:
NOTE: The infile PARMS(DBSPLIT) is: Dsname=SYS.PDS.EXAMPLE(DBSPLIT), Unit=SYSDA,Volume=ABC123,Disp=SHR,Blksize=6160, Lrecl=80,Recfm=FB,Creation=2011/11/09
Note: Some third-party file management utilities might store data in this area of the member record and cause this error. The same utility might later update the member record again, causing the error in SAS to recur.
Click the Hot Fix tab in this note to access the hot fix for this issue.
Product Family | Product | System | SAS Release | |
Reported | Fixed* | |||
SAS System | Base SAS | z/OS | 9.3 TS1M0 | 9.3 TS1M2 |
%MACRO ISPSTATS(PDS=,RPTBADSTATS=Y,RPTALLSTATS=N);
%IF &PDS EQ %STR() %THEN
%DO;
%PUT ERROR: You must provide the PDS name you want the STATS for.;
%PUT NOTE: Specify the PDS= keyword when invoking ISPSTATS macro.;
%END;
%ELSE
%DO;
FILENAME TESTPDS "&PDS" DISP=SHR;
DATA _NULL_;
%IF &RPTBADSTATS EQ Y OR RPTALLSTATS NE N %THEN
%DO; /* DO RPTBADSTATS OR NOT */
LENGTH A B $128 BADENTRYX $256;
%END; /* END RPTBADSTATS OR NOT*/
FILE PRINT HEADER=H;
INFILE TESTPDS RECFM=U BLKSIZE=256 LRECL=256;
DO WHILE(1=1);
COL=3;
INPUT COUNT PIB2. @;
IF COUNT LT 14 THEN RETURN;
DO WHILE(COL LT COUNT);
INPUT @COL MEMBER $8. TTR PIB3. IND PIB1. @;
IF MEMBER EQ:'FFFFFFFF'X THEN
DO;
INPUT;
RETURN;
END;
ELSE
DO;
%IF &RPTBADSTATS EQ Y %THEN
%DO; /* DO: RPTBADSTATS OR NOT */
IF IND NE 0 AND IND NE 15 AND IND NE 20 THEN
DO; /* DO: DISPLAY BAD STATS */
PUT / @4 MEMBER @15 IND;
PUT 'The following is the USER AREA of the BAD record:';
BADENTRY=SUBSTR(_INFILE_,COL+13,2*MOD(IND,32));
PUT / BADENTRY;
BADENTRYX=PUT(BADENTRY,HEX256.);
/* THIS FORMATS THE HEX VALUES ACROSS TWO LINES AS THEY */
/* WOULD DISPLAY WITH "HEX ON" IN ISPF */
A=' ';
B=' ';
DO I = 1 TO (IND*2)*2 BY 2;
A=TRIM(A)||SUBSTR(BADENTRYX,I,1);
B=TRIM(B)||SUBSTR(BADENTRYX,I+1,1);
END;
AA=TRIM(A);
BB=TRIM(B);
PUT AA / BB //;
END; /* END: DISPLAY BAD STATS*/
ELSE
%END; /* END: RPTBADSTATS OR NOT*/
DO; /* DO GOOD STATS */
IF IND=15 OR IND=20 THEN
DO; /* DO IND=15 ISPF STATS */
INPUT VV PIB1. MO PIB1. BLANK PIB1. SS PK1. CREATED PDJULI4.
CHANGED PDJULI4. HH PK1. MM PK1. SIZE PIB2.
INIT PIB2. MOD PIB2. USERID $10. @;
CHGTIME=(HH*3600)+(MM*60)+SS;
PUT @4 MEMBER @15 IND @20 CREATED YYMMDD10.
@33 CHANGED YYMMDD10. @46 CHGTIME TIME8. @57 SIZE
@65 INIT @72 MOD @80 VV Z2. '.' MO Z2. @88 USERID;
%IF &RPTALLSTATS NE N %THEN
%DO; /* DO RPTALLSTATS OR NOT */
PUT 'The following is the USER AREA of the GOOD record:';
ENTRY=SUBSTR(_INFILE_,COL+13,2*MOD(IND,32));
PUT / ENTRY;
ENTRYX=PUT(ENTRY,HEX256.);
A=' ';
B=' ';
DO I = 1 TO (IND*2)*2 BY 2;
A=TRIM(A)||SUBSTR(ENTRYX,I,1);
B=TRIM(B)||SUBSTR(ENTRYX,I+1,1);
END;
AA=TRIM(A);
BB=TRIM(B);
PUT AA / BB //;
%END; /* END RPTBADSTATS OR NOT*/
END; /* END IND=15 ISPF STATS */
ELSE
DO; /* DO IND=0 NO STATS */
PUT @4 MEMBER @15 IND;
%IF &RPTALLSTATS NE N %THEN
%DO; /* DO RPTALLSTATS OR NOT */
PUT 'There are no stats for this member.' /;
%END;
END; /* END IND=0 NO STATS */
END; /* END GOOD STATS */
END;
COL=COL+12+2*MOD(IND,32); /* POSITION TO NEXT ENTRY*/
MEMCNT+1;
CALL SYMPUT('MEMCNT',COMPRESS(PUT(MEMCNT,8.)));
IF COL GE COUNT THEN
DO;
INPUT;
RETURN;
END;
END; /* END DO COL LT COUNT */
END; /* END MAIN LOOP 1=1 */
RETURN;
H:
PUT @4 'NAME ' @15 'IND ' @20 'CREATED' @33 'CHANGED' @46 'TIME'
@57 'SIZE' @65 'INIT' @72 'MOD' @80 'VV' @83 'MM' @88 'ID' /;
RETURN;
RUN;
DATA _NULL_;
FILE PRINT;
PUT "There were &MEMCNT members processed from &PDS";
RUN;
%END;
%MEND ISPSTATS;
The SAS System 14:14 Thursday, November 3, 2011 1 NAME IND CREATED CHANGED TIME SIZE INIT MOD VV MM ID MEMBER1 15 2011-10-31 2011-10-31 12:44:26 38 38 0 01.00 SASRHA MEMBER2 15 2001-02-21 2001-02-21 15:10:00 117 117 0 01.00 BATCH MEMBER3 0 MEMBER4 23 The following is the USER AREA of the BAD record: k:::1h{....::....:::q{..::n:..:::d:&:::FN:[MC 09132F8C00002600003659C00109200123815300CDBADC 027F818000000200000298000755200448460211658D43 MEMBER5 0 The SAS System 14:14 Thursday, November 3, 2011 2 There were 5 members processed from MY.PDS.LIBRARY
A fix for this issue for Base SAS 9.3 is available at:
https://tshf.sas.com/techsup/download/hotfix/HF2/E80.html#44847A fix for this issue for Base SAS 9.3_M1 is available at:
https://tshf.sas.com/techsup/download/hotfix/HF2/F98.html#44847Type: | Problem Note |
Priority: | high |
Date Modified: | 2012-03-19 11:26:24 |
Date Created: | 2011-11-10 11:02:27 |