如何在SAS中动态删除和导入数据集?

时间:2013-07-31 20:02:23

标签: sas sas-macro

我有四个以逗号分隔的文件:mar2009.txt,mar2010.txt,mar2011.txt和mar2012.txt

我正在尝试清理我的库并动态导入这些数据集:

libname my "C:\Users\Owner\Desktop\SAS\";

data A; // I do not this step but if I do not use it the the "do" becomes red in color
do i = 2009 to 2012;

proc datasets library=my;
delete mar.&i;
run;

proc import out=my.mar.&i datafile="C:\Users\Owner\Desktop\SAS\mar.&i.txt" dbms=dlm replace;
delimiter='2c'x;
getnames=yes;
datarow=2;
run;

end;
run;

1 个答案:

答案 0 :(得分:2)

要从根本上回答您的问题,您不需要仅仅因为重新导入数据集而“清理”数据集;它将自动被替换。

您可以编写一个宏来执行导入,如下所示:

%macro import_myfile(i=);
proc import file="...whatever...\mar&i.txt" out=mar_&i. dlm=',' replace;
run;
%mend import_myfile;

%import_myfile(i=2009);
%import_myfile(i=2010);
%import_myfile(i=2011);
%import_myfile(i=2012);

你可以编写一个循环来执行从2009年到2012年的循环,但如果它只是四次运行则不值得代码。如果要执行动态数字,并且这些值在数据集中,则可以这样做:

data data_torun;
input filenum;
datalines;
2009
2010
2011
2012
;;;;
run;

proc sql;
select cats('%import_myfile(i=',filenum,')') into :listtorun 
 separated by ' '
 from data_torun;
quit;

&listtorun.;
*this will become the same four calls as above;

通常最好将这样的数据保存在数据集形式中,而不是在代码可能发生变化时(甚至在循环中)。这样你就可以将它存储在一个文本文件中并将其读入。