我正在尝试将15个不同的txt文件中的数据导入sas。我想将不同的文件名提供给一个数组,然后使用宏中的数组元素将所有数据导入工作文件夹。以下不起作用;任何帮助都非常感谢!!
%macro DATAIMP;
array filenames(3) visit visit_event department
%do i =1 %to 3 %by 1
proc import
datafile="C:\Users\AR\Documents\data\&filename(i).txt"
OUT= &filenames(i)_1
dbms=dlm replace;
delimiter=";";
getnames=yes;
run;
end;
%mend DATAIMP;
%DATAIMP;
run;
答案 0 :(得分:1)
array
是数据步骤中的状态网,你不能那样使用它。
您可以做的是创建一个包含所有文件名的数据集,并从中创建宏变量:
data file;
input filename $50.;
datalines;
visit
visit_event
department
;
run;
%macro DATAIMP;
data _NULL_; /*local macro variables called FILENAME1, FILENAME2,...*/
set file end=fine;
call symput("FILENAME"||compress(_N_),filename);
if fine then call symput("NF",compress(_N_));
run;
%DO I=1 %TO &NF;
proc import
datafile="C:\Users\AR\Documents\data\&&FILENAME&I...txt"
OUT= &&FILENAME&I.._1
dbms=dlm replace;
delimiter=";";
getnames=yes;
run;
%END;
%mend DATAIMP;
%DATAIMP;
请记住&&
解析为&
,对于每个宏分辨率,您需要.
来标记宏变量的结尾。