使用SAS宏导入具有顺序名称的多个txt文件

时间:2013-12-04 21:55:30

标签: sas

我有4个txt文件需要加载到SAS并将它们保存为4个sas文件。以下是文本文件的外观:cle20130805.txt,cle20130812.txt,cle20130819.txt和cle20130826.txt。我在%Macro下使用%Do循环,以便只使用一次Macro调用导入4个文件。所以这是我的代码:

%macro cle;
  %do i=20130805 %to 20130826 %by 7;
   Data cleaug.cle&i;
     infile "home/abc/cle&i..txt" dlm= '|' dsd firstobs=1 obs=100;
     input a_no b_no c_no;
   run;
 %end;
%mend cle;
%cle

我希望保存4个sas文件,只调用一次marco。但它无法成功运行。我在代码中做错了什么想法?

谢谢,

1 个答案:

答案 0 :(得分:3)

我不建议您尝试编写一个宏来导入所有四个文件。要么它只是你曾经使用过一次的特定宏 - 在这种情况下你可以手工编写并节省你已经花费的时间 - 或者你必须每个月修改一次或者你使用的任何东西它

相反,将宏设置为恰好一个文件,但包含轻松调用它所需的信息。在这种情况下,听起来你需要一个参数:日期,所以20130805或诸如此类。然后给它一个合理的名称,真正说出它的作用。

%macro import_files(date=);
  Data cleaug.cle&date.;
     infile "home/abc/cle&date..txt" dlm= '|' dsd firstobs=1 obs=100;
     input a_no b_no c_no;
   run;
%mend import_files;

现在你打电话给它:

%import_files(date=20130805)
%import_files(date=20130812)
%import_files(date=20130819)
%import_files(date=20130826)

就像你上面写的宏一样简单,甚至硬编码四个日期。如果日期以某种方式可预测,您也可以非常轻松地生成宏调用(例如,如果有超过4个)。你可以做一个文件所在位置的目录列表,或者如果你真的喜欢循环,可以使用CALL EXECUTE从数据步骤中调用宏。