我有一个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)
让我知道你们的想法。感谢
答案 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);