读取给定目录中所有文件的名称,并使用SAS查找模式

时间:2016-10-05 11:58:01

标签: sas

我在SAS中有以下任务。 Ggiven是我在SAS中导入的Excel文件。在一行“looking_date”中,我感兴趣的是一个日期。

enter image description here

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

此目录中每个文件的名称包含一个日期和另一个可能始终不同的部分。

所以我以算法形式尝试:

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

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

1 个答案:

答案 0 :(得分: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;