错误:尝试创建本地文件时(zip文件)打开失败

时间:2018-05-21 21:01:21

标签: sas zip

我的同事和我有三个zip文件,代表从NPPES数据传播的CMS每月下载的三次迭代(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文件。我们不确定发生了什么事;有什么建议吗?

(如果您想亲自检查文件,数据来自http://download.cms.gov/nppes/NPI_Files.html。)

2 个答案:

答案 0 :(得分:0)

您是否尝试在会员名称周围添加引号?

infile inzip("npidata_pfile_20050523-20180513.csv") ...

答案 1 :(得分:0)

在Windows 10 64位上看到相同的ERROR消息,有足够的RAM和磁盘空间。

ZIP引擎使用的Windows内部可能正在处理涉及文件句柄的流。所以我怀疑ZIP引擎试图分配太多RAM或太大的中间文件来处理提取6GB" npidata_pfile_20050523-20180513.csv"。

将问题提交给SAS支持 - 可能有一些会话设置会让引擎对该文件起作用。如果没有,您必须在SAS之外提取文件。

四月和五月的pfile大小有多大?