使用SAS Macro& IC时出现“XLSX文件不存在”错误Proc Import可同时导入多个.xlsx文件

时间:2014-08-01 22:47:19

标签: sas sas-macro

我有一个sas宏,它使用proc import来加载多个.xlsx文件,之前它运行得很好。今天,我有更多需要加载的.xlsx文件文件。所以,我使用了相同的宏观想法。但这一次它造成了一个问题,无法通过。这是sas代码:

*name q3 file path;
filename file01 '/home/myname/gcs_coded/Los Angeles_CA_Q3_English_EF.xlsx';
filename file02 '/home/myname/gcs_coded/Los Angeles_CA_Q3_English_Prime.xlsx';
filename file03 '/home/myname/gcs_coded/Los Angeles_CA_Q3_Spanish_ET.xlsx';
filename file04 '/home/myname/gcs_coded/Los Angeles_CA_Q3_Spanish_Prime.xlsx';

%macro load (id=, filename= );

proc import out = &id
        datafile = &filename
        dbms = xlsx
        replace;
        sheet = "sheet1";
getnames = yes;
run;

%mend load;

%load (id=q3_01, filename=file01); 

这是错误消息:

ERROR: XLSX file does not exist -> /FILE01.xlsx

NOTE: The SAS System stopped processing this step because of errors.
NOTE: PROCEDURE IMPORT used (Total process time):
  real time           0.00 seconds
  cpu time            0.01 seconds

但非常有趣的是,我随后取出了第二个marco参数,但只是复制文件链接,如下所示,它运行良好,这意味着链接正常,文件退出。

%macro load (id= );

proc import out = &id
        datafile = '/home/myname/gcs_coded/Los Angeles_CA_Q3_English_EF.xlsx'
        dbms = xlsx
        replace;
        sheet = "sheet1";
        getnames = yes;
run;

%mend load;

%load (id=q3_01)

让我知道你们的想法。感谢

1 个答案:

答案 0 :(得分:2)

据我所知,proc import无法识别引用.xlsx文件的fileref。我尝试使用fileref导入csv并且它工作,然后一个.xls文件,它工作,但它不适用于.xlsx文件。因此,要导入fileref,您似乎必须使用文字路径跟datafile =,而不是引用路径的fileref。解决这个问题的一种方法是将文件名存储到宏变量中,如下所示:

*name q3 file path;
%let file01 = '/home/myname/gcs_coded/Los Angeles_CA_Q3_English_EF.xlsx';

然后当你调用宏(你不需要改变)时,让文件名等于文件的宏变量:

%load (id=q3_01, filename=&file01);