Sas 错误:尝试创建本地文件期间(zip文件)的打开失败
我的同事和我有三个zip文件,代表每月从CMS下载NPPES数据发布的三次迭代(3月、4月和5月)。我们使用以下代码从最新的zip文件中提取所需内容,并创建一个相当紧凑的数据集Sas 错误:尝试创建本地文件期间(zip文件)的打开失败,sas,zip,Sas,Zip,我的同事和我有三个zip文件,代表每月从CMS下载NPPES数据发布的三次迭代(3月、4月和5月)。我们使用以下代码从最新的zip文件中提取所需内容,并创建一个相当紧凑的数据集 PROC IMPORT OUT=NPI_Layout DATAFILE= "&dir./NPI File Layout.xlsx" DBMS=XLSX REPLACE; SHEET="Sheet1"; RUN; options compress = yes; data np
PROC IMPORT OUT=NPI_Layout
DATAFILE= "&dir./NPI File Layout.xlsx"
DBMS=XLSX REPLACE;
SHEET="Sheet1";
RUN;
options compress = yes;
data npi_layout;
set npi_layout;
length infmt fmt inpt $60. lbl $200.;
if type = 'NUMBER' then do;
infmt = 'informat '||compress(field)||' '||compress(length)||'.;';
fmt = 'format '||compress(field)||' '||compress(length)||'.;';
inpt = compress(field);
end;
else if type = 'VARCHAR' then do;
infmt = 'informat '||compress(field)||' $'||compress(length)||'.;';
fmt = 'format '||compress(field)||' $'||compress(length)||'.;';;
inpt = compress(field)||' $';
end;
else if type = 'DATE' then do;
infmt = 'informat '||compress(field)||' mmddyy10.;';
fmt = 'format '||compress(field)||' date9.;';
inpt = compress(field);
end;
lbl = 'label '||compress(field)||" = '"||trim(label)||"';";
run;
proc sql noprint;
select infmt
,fmt
,inpt
,lbl
into :infmt1 -
,:fmt1 -
,:inpt1 -
,:lbl1 -
from npi_layout;
quit;
%macro loop;
%let infmt_stmnt = ;
%let fmt_stmnt = ;
%let inpt_stmnt = input;
%let lbl_stmnt = ;
%do i = 1 %to &sqlobs;
%let infmt_stmnt = &infmt_stmnt &&infmt&i;
%let fmt_stmnt = &fmt_stmnt &&fmt&i;
%let inpt_stmnt = &inpt_stmnt &&inpt&i;
%let lbl_stmnt = &lbl_stmnt &&lbl&i;
%end;
data npi.npi;
%let _EFIERR_ = 0; /* set the ERROR detection macro variable */
infile inzip(npidata_pfile_20050523-20180513.csv)
delimiter = ',' MISSOVER DSD lrecl = 32767 firstobs = 2;* obs = 10000;
&infmt_stmnt;
&fmt_stmnt;
&inpt_stmnt;
&lbl_stmnt;
run;
%mend loop;
%loop;
当我们在3月份的文件上运行上述代码时,我们得到了一个成功的输出。但是,当我们尝试在4月和5月的下载中运行它时,会出现以下错误:
日志错误
ERROR: Open failure for
*dir*/NPI/Downloads/NPPES_Data_Dissemination_May_2018.zip
during attempt to create a local file handle.
Google只返回一个结果,这表明当文件名(或路径,大概是)错误时会弹出一个错误。我们多次检查了路径和文件名,结果都是正确的(很明显,代码在March文件中有效)。此外,如果我更改代码,使其试图从zip文件中提取一个不存在的.csv,它会给我一个不同的错误,该文件在zip中不存在,因此它首先可以清楚地看到zip文件。我们不确定到底发生了什么;有什么建议吗
(如果您想自己检查文件,数据来源于。)是否尝试在成员名称周围添加引号
infile inzip("npidata_pfile_20050523-20180513.csv") ...
在具有大量RAM和磁盘空间的64位Windows 10上看到相同的错误消息 ZIP引擎使用的Windows内部构件可能处理涉及文件句柄的流。因此,我怀疑ZIP引擎试图分配太多RAM或太大的中间文件来处理6GB“npidata_pfile_20050523-20180513.csv”的提取 将该问题提交给SAS支持部门--可能存在一些会话设置,使引擎可以针对该文件工作。如果没有,则必须在SAS外部提取文件
四月和五月的文件大小有多大?inzip的文件名声明是什么?如果使用其他工具(如Windows file Explorer或7zip)打开zip文件,是否会显示任何错误?您能否显示“NPI file layout.xlsx”中包含的布局信息?我猜大概是328行,并以某种方式从“NPPES Data Distribution\u Public file-Readme.pdf”中转录。我可以看到该文件没有问题,是的,这是pdf的表格版。它是329行8列;不过,我不知道如何在这里添加文件本身。遇到了类似的问题。是否有任何更新或SAS论坛讨论?没有,很遗憾。经过与SAS支持团队的反复交流,事情神秘地解决了,从此再也没有发生过。我们不确定这是否是资源限制、文件损坏或其他原因。是的。另外,正如我提到的,它在三月文件上工作——只是不在四月或五月。四月和五月是~6.5-6.6GB。三月大约是6.4GB。这确实是一个其他同等条件下的难题。