【问题标题】:read the name of all files in a given directory and find the pattern using SAS读取给定目录中所有文件的名称并使用 SAS 查找模式
【发布时间】:2016-10-05 11:58:00
【问题描述】:

我在 SAS 中有以下任务。 Ggiven 是我在 SAS 中导入的 Excel 文件。在一列“looking_date”中出现了我感兴趣的日期。

另一方面,有一个目录(“C:\myWork\”)包含许多文件。

此目录中每个文件的名称都包含一个日期和另一部分,这可能总是不同的。

所以我以算法形式尝试一下:

  1. 在“looking_date”列中查找每个日期
  2. 如果来自“looking_date”的日期出现在一个文件的名称中,则检入目录“C:\myWork\”(一种模式匹配),然后导入 以日期为名称的文件

我不知道如何实现上述两个步骤。起初我以为我从这个目录中读取了所有文件的名称,但是我仍然对名称模式有问题! 我很感激每一个提示,只是为了能够开始

【问题讨论】:

  • 您对模式检查的要求不明确。也请发布您尝试过的内容。

标签: sas


【解决方案1】:

要读取操作系统上的目录,您可以像这样使用data step

%let path_to_catalog=C:\myWork;

data files;
    /* define a directory */
    rc = filename("mydir","&path.");
    /* open the directory */
    did = dopen("mydir");
    /* check if it's opened */
    if did > 0 then do;
        /* itereate over objects in the directory */
        do n = 1 to dnum(did);
            /* read name of file */
            filename = dread(did, n);
            /* output files with *.DAT extension */
            if scan(upcase(filename), -1, '.') = 'DAT' then 
                output;
        end;
    end;
    /* close the directory */
    rc = dclose(did);

    drop rc did;
run;

从 Excel 文件中读取日期

libname exc_lib pcfiles "path_to_execel";
proc sql;
    select distinct input(looking_date, ddmmyy8.)
    into :dates separated by ','
    from exc_lib.'sheet1$'n;
quit;

检查文件是否包含 Excel 文件中的日期

data result;
    set files;
    date = input(substr(filename, 1, 8), ddmmyy8.);
    if date in (&dates) then output;
run;

【讨论】:

  • 为什么我从第一部分得到一个空表。唯一的区别是:%let path_to_catalog=\\vol1\statist_prod\Datanbank_ZIK\Archiv;数据文件; /* 定义一个目录 / rc = filename("Archiv","&\\vol1\statist_prod\Datanbank_ZIK\"); / 打开目录 / did = doopen("Archiv"); / 检查是否打开 */
  • 仅在 %let 语句中输入您的路径,例如%let path_to_catalog=\\vol1\statist_prod\Datenbank_ZIK;
  • 罗伯特,我做到了,但是我得到了一个空表,然后我检查了没有'if did > 0'的部分,代码没有进入循环。这就是我猜的问题。如何检查它是否在正确的路径中?
  • 我试过了:%let path_to_catalog=\\ftai06\vol1\statist_prod\Datanbank_ZIK\Archiv;数据文件; /* 定义一个目录 / rc = filename("mydir","&path."); / 打开目录 / did = doopen("mydir"); / 检查是否打开 /test=did; / 关闭目录 */ rc = dclose(did);删除 rc 做了;跑;结果是'did'=0
猜你喜欢
  • 1970-01-01
  • 2020-01-19
  • 2013-07-08
  • 1970-01-01
  • 2011-02-24
  • 1970-01-01
  • 2021-04-18
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多