Sas 错误:尝试创建本地文件期间(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

我的同事和我有三个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 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。这确实是一个其他同等条件下的难题。