&引用;XLSX文件不存在";使用SAS宏时出错&;Proc Import可同时导入多个.xlsx文件

&引用;XLSX文件不存在";使用SAS宏时出错&;Proc Import可同时导入多个.xlsx文件,sas,sas-macro,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 Angele

我有一个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); 
下面是erro的信息:

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)

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

据我所知,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';
然后,在调用宏(无需更改)时,让filename等于文件的宏变量:

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