I am using SAS 9.2 attempting to read the data from an IDCAMS utility report that lists information about z/OS mainframe datasets. The dates are in the format yyyy.jjj where yyyy is the four digit year and jjj is the Julian day of the year. The period is the problem, as standard SAS INFORMATS don't like it. How would I read such a date?
Sample code:
DATA ALL smflist (KEEP=DSNAME volser) ;
LENGTH dsname $ 44. volser $ 6. createdt 8.;
INFILE SYSPRINT LENGTH=LEN;
input @ "NONVSAM ------- " dsname;
input @ "CREATION--------" createdt JULIAN8.;
input @ "VOLSER------------" volser;
Sample output including INFILE SYSPRINT: (Col 54 has the creation date)
NOTE: Invalid data for createdt in line 282 54-61.
NONVSAM ------- SYSP.LPAR.SMFOTHR.ROLLING.G3563V00
IN-CAT --- USR.UCAT.ALIASP
HISTORY
DATASET-OWNER-----(NULL) CREATION--------2014.174
RELEASE----------------2 EXPIRATION------0000.000
ACCOUNT-INFO-----------------------------------(NULL)
STATUS------------ACTIVE
SMSDATA
STORAGECLASS ------SCPNV MANAGEMENTCLASS-MCPNVGD2
DATACLASS ---------DCSMF LBACKUP ---XXXX.XXX.XXXX
VOLUMES
VOLSER------------MIGRAT DEVTYPE------X'78048081' FSEQN----------
ASSOCIATIONS
GDG------SYSP.LPAR.SMFOTHR.ROLLING
ATTRIBUTES
This code handled it...
DATA smflist (KEEP=dsname createdt volser) ;
LENGTH dsname $ 44. volser $ 6. dummy $ 8. createdt 7.;
FORMAT CREATEDT MMDDYY10.;
INFILE SYSPRINT LENGTH=LEN;
input @ "NONVSAM ------- " dsname;
input @ "CREATION--------" dummy;
dummy = prxchange('s/(\d{4}).(\d{3})/\1\2/', -1, dummy);
createdt = input(dummy,JULIAN7.);
input @ "VOLSER------------" volser;