如何从某个日期之前创建的文件夹中读取文件

how to read files from a folder that were created before a date

我正在尝试使用 SAS 从一个目录中读取多个文件,它们是在某个日期之前创建的。

我已使用此代码帮助我阅读所有文件。它工作得很好。现在我发现只有在特定日期之前创建的一些文件才是我需要的。我认为这可以通过 FILENAME PIPE Dir 选项或 INFILE 语句选项来完成,但我找不到答案。

代码来源:

http://support.sas.com/kb/41/880.html

filename DIRLIST pipe 'dir "C:\_today\file*.csv" /b ';

data dirlist ;
   infile dirlist lrecl=200 truncover;
   input file_name 0.;
run;

data _null_;
   set dirlist end=end;
   count+1;
   call symputx('read'||put(count,4.-l),cats('c:\_today\',file_name));
   call symputx('dset'||put(count,4.-l),scan(file_name,1,'.'));
   if end then call symputx('max',count);
run;

options mprint symbolgen;
%macro readin;
   %do i=1 %to &max;

      data &&dset&i;
         infile "&&read&i" lrecl=1000 truncover dsd;
         input var1 $ var2 $ var3 $;
       run;

   %end;
%mend readin;

%readin;

目前您正在使用 dir 命令读取文件名。现有的 /b 修饰符表示只打印文件名,没有其他内容。您想要将其更改为同时读取文件名和文件的创建日期。为了做到这一点,它变得有点混乱。您需要更改该管道命令:

filename DIRLIST pipe 'dir "C:\_today\file*.csv" /b ';

...为此...:[=​​22=]

filename DIRLIST pipe 'dir "C:\_today\file*.csv" /tc ';

输出会变成这样:

file1.csv
file2.csv
...

...像这样...:[=​​22=]

 Volume in drive C has no label.
 Volume Serial Number is 90ED-A122

 Directory of C:\_today

01/13/2017  09:14 AM             1,991 file1.csv
01/11/2017  11:43 AM               169 file2.csv
...
...
...
01/11/2017  11:43 AM               169 file99.csv

          99 File(s)          6,449 bytes
           0 Dir(s)  57,999,806,464 bytes free

因此您需要修改创建 dirlist 的数据步骤,以清理新的 dir 语句返回的结果。您将需要忽略页眉和页脚并读取日期和时间等。一旦您以适当的 SAS 格式获得该日期和时间,您就可以使用 SAS where 子句来保留您所在的行感兴趣。我会把这个作为练习留给你做。如果您遇到问题,您可以随时提出一个新问题。

如果您需要有关 dir 命令的更多信息,可以打开命令提示符(开始菜单->运行->"cmd"),然后输入 dir /? 查看 dir 命令的可用开关列表。您可能会发现它的开关组合略有不同,比我上面列出的更适合您的任务。

您可以使用 powershell 来利用操作系统的功能。

filename get_them pipe 
" powershell -command 
  ""
    dir c:\temp 
    | where {$_.LastWriteTime -gt '3/19/2019'}
    | select -property name
    | ft -hidetableheader
  ""
";

data _null_;
  infile get_them;
  input;
  putlog _infile_;
run;