在SAS

时间:2019-02-08 17:24:34

标签: sas

我有一个开头为

的程序
%let filename = file1.csv

然后程序将文件导入到sas数据集中,然后根据一些规则将一些数据移到sql表中。

我想通过处理文件夹中的任何文件来让程序循环..我猜想是每次到达程序末尾时都重新定义文件名,然后返回顶部,直到文件夹中的所有csv文件已经处理了吗?

1 个答案:

答案 0 :(得分:0)

这是一个可能会受益于创建宏的过程的示例。听起来您现有的代码快要成为宏了。只需将现有代码包装到一个以FILENAME作为参数的宏定义中即可(删除%let语句)。

然后您现有的程序可以变成这样。最后一行是实际执行宏定义中定义的步骤的那一行。

%macro loadfile(filename=);
   ... existing code ....
%mend loadfile;
%loadfile(filename=file1.csv);

要将其扩展为加载目录中的所有文件,您只需要生成文件列表并使用该列表生成对宏的一系列调用即可。因此,类似的操作可能会在Windows计算机上运行。因此它将调用Windows命令DIR来获取文件列表,并将结果读入变量,并为找到的每个文件生成对宏的调用。数据步骤完成后,由CALL EXECUTE推送的命令将运行。

data _null_;
   infile 'dir /b *.csv' pipe truncover ;
   input filename $256. ;
   call execute(cats('%nrstr(loadfile)(filename=',filename,')'));
run;