我有一个需要导入SAS的文件列表。我需要指定文件名,这样我就不会输入相同行的倍数:
constructor
我尝试编写%宏但它无法识别文件名:
filename inf_1_1 'C:\Users\Main_1\final_complete_1.1.csv';
filename inf_1_2 'C:\Users\Main_1\final_complete_1.2.csv';
我确信我做错了,需要从字符串变量中取出文件名。但我不知道该怎么做。
任何帮助都将受到高度赞赏。
答案 0 :(得分:0)
请参阅下面的修改 - 基本上减少文件名字符串以导入数据。
问题清单:
不一定需要FileRef
%macro FILENAME (I_FROM=1, I_TO=I_FROM, J_FROM=1, J_TO=J_FROM);
%local I J;
%do I = &I_FROM %to &I_TO;
%do J = &J_FROM %to &J_TO;
filename i_&I._&J. "C:\Users\Main_&I.\final_complete_&I.&J..csv";
proc import out=data_&i._&j. datafile=i_&i._&j. dbms=csv; run;
%end;
%end;
%mend;
%FILENAME(I_FROM=1, I_TO=10, J_FROM=1, J_TO=2);
如上所述,您并不需要文件名参考。
%macro FILENAME (I_FROM=1, I_TO=I_FROM, J_FROM=1, J_TO=J_FROM);
%local I J;
%do I = &I_FROM %to &I_TO;
%do J = &J_FROM %to &J_TO;
proc import out=data_&i._&j. datafile="C:\Users\Main_&I.\final_complete_&I.&J..csv" dbms=csv; run;
%end;
%end;
%mend;
%FILENAME(I_FROM=1, I_TO=10, J_FROM=1, J_TO=2);
最后但并非最不重要的一点是,你不需要这里的宏:
data _null_;
do i=1 to 2;
do j=1 to 2;
*create filename;
file_name = catt('C:\users_Main\Main_', i, '\final_complete_', i, '_', j, '.csv');
*create output data set name;
outdata = catt('data_', i, '_', j);
*create command to import;
str = catt('proc import out=', outdata, ' datafile=', filename, ' dbms=csv; run;');
call execute(str);
end;
end;
run;
答案 1 :(得分:0)
非常感谢您的提示。我写了以下宏:
%macro Filename_loop (I_FROM=1, I_TO=&I_FROM, J_FROM=1, J_TO=&J_FROM);
%local I J;
%do I = &I_FROM %to &I_TO;
%do J = &J_FROM %to &J_TO;
filename inf_&I._&J. "C:\Users\Main_&I.\final_complete_&I..&J..csv";
%end;
%end;
%mend;
%Filename_loop(J_TO=2);