- Mark as New
- Bookmark
- Subscribe
- Mute
- RSS Feed
- Permalink
- Report Inappropriate Content
Posted 07-15-2008 10:15 AM
(1513 views)
I am working with SAS in a mainframe environment - OS/390. The program that is being executed stops processing with the following error:
ERROR: Format/Informat $OPFMT. could not be located.
when attempting to execute the last line of the following code:
LIBNAME FORMATS 'C.SAS.FORMAT6' DISP=SHR;
OPTIONS FMTSEARCH=(FORMATS WORK);
LIBNAME RECVBL6 'C.SAS.RECVBL6.DATA' DISP=SHR;
LIBNAME RECVBL6A 'C.SAS.RECVBL6A.DATA' DISP=SHR;
PROC SORT DATA=OPDATA;
BY KEY75 KEY76 INVOICE;
PROC SORT DATA=CUSTDATA;
BY KEY75 KEY76 INVOICE;
DATA OPDATA ;
MERGE OPDATA CUSTDATA;
BY KEY75 KEY76 INVOICE;
PROC SORT DATA=OPDATA OUT=OPFMT NODUPKEY;
BY DEALER DIV INVOICE;
DATA OPFMT;
LENGTH DEALER $6 INVOICE $10;
SET OPFMT END=EOF;
RETAIN FMTNAME 'OPFMT' TYPE 'C' LABEL 'YES';
START=DEALER||DIV||INVOICE;
OUTPUT;
IF EOF;
HLO='O';
LABEL='NO';
OUTPUT;
PROC FORMAT CNTLIN=OPFMT;
DATA RECVBL;
SET RECVBL6.UNITS(IN=A);
WHERE PUT(DEALER||DIV||INVOICE,$OPFMT.)='YES';
ERROR: Format/Informat $OPFMT. could not be located.
when attempting to execute the last line of the following code:
LIBNAME FORMATS 'C.SAS.FORMAT6' DISP=SHR;
OPTIONS FMTSEARCH=(FORMATS WORK);
LIBNAME RECVBL6 'C.SAS.RECVBL6.DATA' DISP=SHR;
LIBNAME RECVBL6A 'C.SAS.RECVBL6A.DATA' DISP=SHR;
PROC SORT DATA=OPDATA;
BY KEY75 KEY76 INVOICE;
PROC SORT DATA=CUSTDATA;
BY KEY75 KEY76 INVOICE;
DATA OPDATA ;
MERGE OPDATA CUSTDATA;
BY KEY75 KEY76 INVOICE;
PROC SORT DATA=OPDATA OUT=OPFMT NODUPKEY;
BY DEALER DIV INVOICE;
DATA OPFMT;
LENGTH DEALER $6 INVOICE $10;
SET OPFMT END=EOF;
RETAIN FMTNAME 'OPFMT' TYPE 'C' LABEL 'YES';
START=DEALER||DIV||INVOICE;
OUTPUT;
IF EOF;
HLO='O';
LABEL='NO';
OUTPUT;
PROC FORMAT CNTLIN=OPFMT;
DATA RECVBL;
SET RECVBL6.UNITS(IN=A);
WHERE PUT(DEALER||DIV||INVOICE,$OPFMT.)='YES';
5 REPLIES 5
- Mark as New
- Bookmark
- Subscribe
- Mute
- RSS Feed
- Permalink
- Report Inappropriate Content
Hi.
There must be an error before, when executing the Format procedure : the $OPFMT. is not created.
I think there is something wrong in the Data step defining the format : the conditionnal part (IF EOF) sould be applied to the next statements. I suggest you try this instead :
[pre]
DATA OPFMT;
LENGTH DEALER $6 INVOICE $10;
SET OPFMT END=EOF;
RETAIN FMTNAME 'OPFMT' TYPE 'C' LABEL 'YES';
START=DEALER||DIV||INVOICE;
OUTPUT;
IF EOF THEN DO ;
HLO='O';
LABEL='NO';
OUTPUT;
END ;
RUN ;
PROC FORMAT CNTLIN=OPFMT FMTLIB ;
RUN ;
[/pre]
The FMTLIB option will allow you to check the format definition in the Output window.
Regards,
Olivier
There must be an error before, when executing the Format procedure : the $OPFMT. is not created.
I think there is something wrong in the Data step defining the format : the conditionnal part (IF EOF) sould be applied to the next statements. I suggest you try this instead :
[pre]
DATA OPFMT;
LENGTH DEALER $6 INVOICE $10;
SET OPFMT END=EOF;
RETAIN FMTNAME 'OPFMT' TYPE 'C' LABEL 'YES';
START=DEALER||DIV||INVOICE;
OUTPUT;
IF EOF THEN DO ;
HLO='O';
LABEL='NO';
OUTPUT;
END ;
RUN ;
PROC FORMAT CNTLIN=OPFMT FMTLIB ;
RUN ;
[/pre]
The FMTLIB option will allow you to check the format definition in the Output window.
Regards,
Olivier
- Mark as New
- Bookmark
- Subscribe
- Mute
- RSS Feed
- Permalink
- Report Inappropriate Content
Pasting the entire log would be helpful.
- Mark as New
- Bookmark
- Subscribe
- Mute
- RSS Feed
- Permalink
- Report Inappropriate Content
Here is the log:
NOTE: The infile ESS is:
Dsname=W.W8PD.ESS.HIST.EXTR.G0887V00(0),
Unit=9348,Volume=508973,Disp=OLD,Blksize=23220,
Lrecl=540,Recfm=FB
NOTE: 7507981 records were read from the infile ESS.
NOTE: The data set WORK.OPDATA has 0 observations and 8 variables.
NOTE: The data set WORK.CUSTDATA has 0 observations and 9 variables.
NOTE: The DATA statement used 22.63 CPU seconds and 3900K.
61 +PROC SORT DATA=OPDATA;
62 + BY KEY75 KEY76 INVOICE;
63 +
WARNING: WER749I No observations to be sorted.
NOTE: WER750I End PROC SYNCSORT. R2.3B*
NOTE: The data set WORK.OPDATA has 0 observations and 8 variables.
NOTE: The PROCEDURE SORT used 0.01 CPU seconds and 4599K.
3 The SAS System
64 +PROC SORT DATA=CUSTDATA;
65 + BY KEY75 KEY76 INVOICE;
66 +
WARNING: WER749I No observations to be sorted.
NOTE: WER750I End PROC SYNCSORT. R2.3B*
NOTE: The data set WORK.CUSTDATA has 0 observations and 9 variables.
NOTE: The PROCEDURE SORT used 0.01 CPU seconds and 4599K.
67 +DATA OPDATA ;
68 + MERGE OPDATA CUSTDATA;
69 + BY KEY75 KEY76 INVOICE;
70 +
NOTE: The data set WORK.OPDATA has 0 observations and 13 variables.
NOTE: The DATA statement used 0.01 CPU seconds and 4559K.
71 +PROC SORT DATA=OPDATA OUT=OPFMT NODUPKEY;
72 + BY DEALER DIV INVOICE;
73 +
WARNING: WER749I No observations to be sorted.
NOTE: WER750I End PROC SYNCSORT. R2.3B*
NOTE: The data set WORK.OPFMT has 0 observations and 13 variables.
NOTE: The PROCEDURE SORT used 0.01 CPU seconds and 5243K.
74 +DATA OPFMT;
75 + LENGTH DEALER $6 INVOICE $10;
76 + SET OPFMT END=EOF;
77 + RETAIN FMTNAME 'OPFMT' TYPE 'C' LABEL 'YES';
78 + START=DEALER||DIV||INVOICE;
79 + OUTPUT;
80 + IF EOF;
81 + HLO='O';
82 + LABEL='NO';
82 + LABEL='NO';
83 + OUTPUT;
84 +
NOTE: The data set WORK.OPFMT has 0 observations and 18 variables.
NOTE: The DATA statement used 0.01 CPU seconds and 5203K.
85 +PROC FORMAT CNTLIN=OPFMT;
85 +
86 +
NOTE: The PROCEDURE FORMAT used 0.00 CPU seconds and 5250K.
87 +DATA RECVBL;
88 + SET RECVBL6.UNITS(IN=A);
89 + WHERE PUT(DEALER||DIV||INVOICE,$OPFMT.)='YES';
ERROR: Format/Informat $OPFMT. could not be located.
ERROR: Format/Informat $OPFMT. could not be located.
ERROR: Format/Informat $OPFMT. could not be located.
90 + KEEP DEALER ACCTIND INVOICE INVYR SS SECTION VERSION SERVICE
91 + LIQDATE LIQCODE TOTINVT;
92 +
93 +
NOTE: The SAS System stopped processing this step because of errors.
NOTE: The infile ESS is:
Dsname=W.W8PD.ESS.HIST.EXTR.G0887V00(0),
Unit=9348,Volume=508973,Disp=OLD,Blksize=23220,
Lrecl=540,Recfm=FB
NOTE: 7507981 records were read from the infile ESS.
NOTE: The data set WORK.OPDATA has 0 observations and 8 variables.
NOTE: The data set WORK.CUSTDATA has 0 observations and 9 variables.
NOTE: The DATA statement used 22.63 CPU seconds and 3900K.
61 +PROC SORT DATA=OPDATA;
62 + BY KEY75 KEY76 INVOICE;
63 +
WARNING: WER749I No observations to be sorted.
NOTE: WER750I End PROC SYNCSORT. R2.3B*
NOTE: The data set WORK.OPDATA has 0 observations and 8 variables.
NOTE: The PROCEDURE SORT used 0.01 CPU seconds and 4599K.
3 The SAS System
64 +PROC SORT DATA=CUSTDATA;
65 + BY KEY75 KEY76 INVOICE;
66 +
WARNING: WER749I No observations to be sorted.
NOTE: WER750I End PROC SYNCSORT. R2.3B*
NOTE: The data set WORK.CUSTDATA has 0 observations and 9 variables.
NOTE: The PROCEDURE SORT used 0.01 CPU seconds and 4599K.
67 +DATA OPDATA ;
68 + MERGE OPDATA CUSTDATA;
69 + BY KEY75 KEY76 INVOICE;
70 +
NOTE: The data set WORK.OPDATA has 0 observations and 13 variables.
NOTE: The DATA statement used 0.01 CPU seconds and 4559K.
71 +PROC SORT DATA=OPDATA OUT=OPFMT NODUPKEY;
72 + BY DEALER DIV INVOICE;
73 +
WARNING: WER749I No observations to be sorted.
NOTE: WER750I End PROC SYNCSORT. R2.3B*
NOTE: The data set WORK.OPFMT has 0 observations and 13 variables.
NOTE: The PROCEDURE SORT used 0.01 CPU seconds and 5243K.
74 +DATA OPFMT;
75 + LENGTH DEALER $6 INVOICE $10;
76 + SET OPFMT END=EOF;
77 + RETAIN FMTNAME 'OPFMT' TYPE 'C' LABEL 'YES';
78 + START=DEALER||DIV||INVOICE;
79 + OUTPUT;
80 + IF EOF;
81 + HLO='O';
82 + LABEL='NO';
82 + LABEL='NO';
83 + OUTPUT;
84 +
NOTE: The data set WORK.OPFMT has 0 observations and 18 variables.
NOTE: The DATA statement used 0.01 CPU seconds and 5203K.
85 +PROC FORMAT CNTLIN=OPFMT;
85 +
86 +
NOTE: The PROCEDURE FORMAT used 0.00 CPU seconds and 5250K.
87 +DATA RECVBL;
88 + SET RECVBL6.UNITS(IN=A);
89 + WHERE PUT(DEALER||DIV||INVOICE,$OPFMT.)='YES';
ERROR: Format/Informat $OPFMT. could not be located.
ERROR: Format/Informat $OPFMT. could not be located.
ERROR: Format/Informat $OPFMT. could not be located.
90 + KEEP DEALER ACCTIND INVOICE INVYR SS SECTION VERSION SERVICE
91 + LIQDATE LIQCODE TOTINVT;
92 +
93 +
NOTE: The SAS System stopped processing this step because of errors.
- Mark as New
- Bookmark
- Subscribe
- Mute
- RSS Feed
- Permalink
- Report Inappropriate Content
For consideration, if it is possible to have a "zero observations selected for your format", then you should consider outputting a "stub" format so that your PUT function look-up does not fail. One technique I might use is to code a PROC FORMAT execution and only specify an OTHER='???'; clause -- obviously you will want to put this code ahead of the PROC FORMAT CNTLIN=...; step so that if there are observations selected, your final SAS format will be complete, not the generated stub.
Scott Barry
SBBWorks, Inc.
Scott Barry
SBBWorks, Inc.
- Mark as New
- Bookmark
- Subscribe
- Mute
- RSS Feed
- Permalink
- Report Inappropriate Content
As the log says (in the beginning of your messages) :
NOTE: The data set WORK.OPDATA has 0 observations and 8 variables.
NOTE: The data set WORK.CUSTDATA has 0 observations and 9 variables.
You datasets are empty from the beginning !
Look for some condition impossible to meet in the import part of the program (the DATA step before the two SORT procedures.
Did that program ever work ?
NOTE: The data set WORK.OPDATA has 0 observations and 8 variables.
NOTE: The data set WORK.CUSTDATA has 0 observations and 9 variables.
You datasets are empty from the beginning !
Look for some condition impossible to meet in the import part of the program (the DATA step before the two SORT procedures.
Did that program ever work ?