【问题标题】:How to iterate through files in SAS?如何遍历 SAS 中的文件?
【发布时间】:2014-02-19 16:12:32
【问题描述】:

我想遍历特定文件夹中的文件,并提取文件名的子字符串。有没有简单的方法可以做到这一点?

lib dir '.../folder';
#iterate through all files of dir and extract first five letters of file name;
#open files and do some processesing, aka data steps proc steps;

【问题讨论】:

  • 到目前为止您尝试过什么?这是一个非常常见的问题,在 SO 或 google 上搜索会产生很多结果。

标签: sas


【解决方案1】:

首先,我要指出“dir”似乎是拼写错误的 libref,而不是文件夹。如果您正在查找文件夹中的文件,您可以使用:

   %macro get_filenames(location);
    filename _dir_ "%bquote(&location.)";
    data filenames(keep=fname);
      handle=dopen( '_dir_' );
      if handle > 0 then do;
        count=dnum(handle);
        do i=1 to count;
          fname=subpad(dread(handle,i),1,5);/* extract first five letters */
          output filenames;
        end;
      end;
      rc=dclose(handle);
    run;
    filename _dir_ clear;
    %mend;

%get_filenames("c:\temp\");

如果您在中寻找数据集,您可以使用:

proc sql;
create table datasets as
  select substr(memname,1,5) as dataset
  from dictionary.tables
  where libname='LIB'; /* must be uppercase */

这两种方法都会产生一个“文件”数据集,随后可以“逐步执行”..

【讨论】:

  • 有没有办法在 _ 等特定分隔符之前读取文件的子字符串?
  • fname=subpad(scan("some_file",1,'_'),1,5);
  • 是否可以遍历由 proc sql 创建的 SQL 记录并对它们执行一些命令,例如为库中的每个 SAS 文件运行 proc 导出?
  • 当然——比如:数据;设置数据集;调用execute('proc print data='!!dataset!!';run');run;
猜你喜欢
  • 2019-05-08
  • 2021-08-20
  • 2016-05-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-07-01
  • 2011-11-29
  • 2021-11-19
相关资源
最近更新 更多