【问题标题】:Processing multiple files sequentially in SAS在 SAS 中按顺序处理多个文件
【发布时间】:2019-02-09 04:23:27
【问题描述】:

我有一个以:

开头的程序
%let filename = file1.csv

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

我想让程序循环处理文件夹中的任何文件..我想每次到达程序末尾时重新定义文件名并返回顶部直到文件夹中的所有 csv 文件处理了吗?

【问题讨论】:

  • 如何做取决于您现有代码的工作方式。例如,如果所有文件都具有相同的结构,您可能只需更改“导入”步骤以将所有 CSV 文件读入单个 SAS 数据集,而无需任何循环。
  • 显示更多代码、import 和 sql 语句。

标签: sas


【解决方案1】:

这是一个可能受益于创建宏的过程示例。听起来您现有的代码已接近准备好成为宏。只需将现有代码包装到以 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;  

【讨论】:

  • 这绝对是完美的。非常感谢
猜你喜欢
  • 1970-01-01
  • 2021-12-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-04-02
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多