BookmarkSubscribeRSS Feed
deleted_user
Not applicable
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';
5 REPLIES 5
Olivier
Pyrite | Level 9
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
darrylovia
Quartz | Level 8
Pasting the entire log would be helpful.
deleted_user
Not applicable
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.
sbb
Lapis Lazuli | Level 10 sbb
Lapis Lazuli | Level 10
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.
Olivier
Pyrite | Level 9
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 ?

sas-innovate-2024.png

Join us for SAS Innovate April 16-19 at the Aria in Las Vegas. Bring the team and save big with our group pricing for a limited time only.

Pre-conference courses and tutorials are filling up fast and are always a sellout. Register today to reserve your seat.

 

Register now!

What is Bayesian Analysis?

Learn the difference between classical and Bayesian statistical approaches and see a few PROC examples to perform Bayesian analysis in this video.

Find more tutorials on the SAS Users YouTube channel.

Click image to register for webinarClick image to register for webinar

Classroom Training Available!

Select SAS Training centers are offering in-person courses. View upcoming courses for:

View all other training opportunities.

Discussion stats
  • 5 replies
  • 655 views
  • 0 likes
  • 4 in conversation