sas宏从多个文件中提取数据

时间:2014-06-03 06:56:24

标签: sql macros sas

我正在尝试将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;

1 个答案:

答案 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;

请记住&&解析为&,对于每个宏分辨率,您需要.来标记宏变量的结尾。