文件中不存在数据时 SAS 导入失败
SAS Import failing when data not present in file
我正在尝试导入一个文本文件,该文件的列名由制表符分隔,但文件中一天没有任何记录。
逻辑如下:
proc import file="/saslocation/Current_Day_Records.txt" out=WORK.VENDOR_RECORDS_BY_DAY
dbms='09'x replace
;run;
日志:
NOTE: Unable to open parameter catalog: SASUSER.PARMS.PARMS.SLIST in update mode. Temporary parameter values will be saved to
WORK.PARMS.PARMS.SLIST.
Unable to sample external file, no data in first 5 records.
ERROR: Import unsuccessful. See SAS Log for details.
非常感谢任何解决错误的帮助。
Header文件中的数据:
Dealer_id日期Dealer_SrDealer_QuoteApproved_QuotesApproval_RateDealer_Dues
我认为您无法以这种方式导入它,因为 SAS 会搜索数据以设置列 types/formats。如果它没有要查看的数据,它将无法将列设置为 numeric/character。
更好的方法是明确告诉 SAS 如何使用 infile 和输入语句创建列:
filename textdata 'saslocation\Current_Day_Records.txt';
data VENDOR_RECORDS_BY_DAY ;
infile textdata delimiter='09'x MISSOVER DSD lrecl=32767 firstobs=2 ;
input
Dealer_id :8.
date :DATE9.
Dealer_Sr :0.
Dealer_Quote :0.
Approved_Quotes :0.
Approval_Rate :8.
Dealer_Dues :8.
;
run;
我只是这样写的,因为我假设你最终可能在该文本文件中有数据并且需要以这种方式导入它..但实际上,你根本不需要 infile 语句如果您只需要一个只有 header 信息的数据集的空白 shell。如果这就是您所需要的,并且您拥有要将它们设置为的列名和属性的完整列表,那么您可以使用 proc sql 或没有 infile 语句的数据步骤轻松地做到这一点。
proc sql;
create table VENDOR_RECORDS_BY_DAY
(
Dealer_id num
, date num format=date9.
, Dealer_Sr char(200)
, Dealer_Quote char(200)
, Approved_Quotes char(200)
, Approval_Rate num
, Dealer_Dues num
);
quit;
编辑添加:如果您真的需要文本文件中的列名(可能有 100 个列名或可变列名),那么您可以使用 getnames = no;
和 [=13 执行 proc 导入语句=] 语句添加,然后按照与此类似的方法获取第一行数据并将其重置为列名:https://communities.sas.com/message/122471#122471
我正在尝试导入一个文本文件,该文件的列名由制表符分隔,但文件中一天没有任何记录。
逻辑如下:
proc import file="/saslocation/Current_Day_Records.txt" out=WORK.VENDOR_RECORDS_BY_DAY
dbms='09'x replace
;run;
日志:
NOTE: Unable to open parameter catalog: SASUSER.PARMS.PARMS.SLIST in update mode. Temporary parameter values will be saved to
WORK.PARMS.PARMS.SLIST.
Unable to sample external file, no data in first 5 records.
ERROR: Import unsuccessful. See SAS Log for details.
非常感谢任何解决错误的帮助。
Header文件中的数据: Dealer_id日期Dealer_SrDealer_QuoteApproved_QuotesApproval_RateDealer_Dues
我认为您无法以这种方式导入它,因为 SAS 会搜索数据以设置列 types/formats。如果它没有要查看的数据,它将无法将列设置为 numeric/character。
更好的方法是明确告诉 SAS 如何使用 infile 和输入语句创建列:
filename textdata 'saslocation\Current_Day_Records.txt';
data VENDOR_RECORDS_BY_DAY ;
infile textdata delimiter='09'x MISSOVER DSD lrecl=32767 firstobs=2 ;
input
Dealer_id :8.
date :DATE9.
Dealer_Sr :0.
Dealer_Quote :0.
Approved_Quotes :0.
Approval_Rate :8.
Dealer_Dues :8.
;
run;
我只是这样写的,因为我假设你最终可能在该文本文件中有数据并且需要以这种方式导入它..但实际上,你根本不需要 infile 语句如果您只需要一个只有 header 信息的数据集的空白 shell。如果这就是您所需要的,并且您拥有要将它们设置为的列名和属性的完整列表,那么您可以使用 proc sql 或没有 infile 语句的数据步骤轻松地做到这一点。
proc sql;
create table VENDOR_RECORDS_BY_DAY
(
Dealer_id num
, date num format=date9.
, Dealer_Sr char(200)
, Dealer_Quote char(200)
, Approved_Quotes char(200)
, Approval_Rate num
, Dealer_Dues num
);
quit;
编辑添加:如果您真的需要文本文件中的列名(可能有 100 个列名或可变列名),那么您可以使用 getnames = no;
和 [=13 执行 proc 导入语句=] 语句添加,然后按照与此类似的方法获取第一行数据并将其重置为列名:https://communities.sas.com/message/122471#122471