как читать файлы из папки, которые были созданы до даты - PullRequest
1 голос
/ 17 июня 2019

Я пытаюсь использовать 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 $100.;
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;

Ответы [ 2 ]

1 голос
/ 18 июня 2019

Вы можете использовать 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;
1 голос
/ 18 июня 2019

В настоящее время вы читаете только имена файлов, используя команду dir. Существующий модификатор /b говорит, печатать только имя файла и ничего больше. Вы хотите изменить его, чтобы прочитать как имя файла, так и дату СОЗДАНИЯ файла. Чтобы сделать это, это становится немного грязным. Вам нужно будет изменить эту команду канала с:

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

... к этому ...:

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

Вывод изменится примерно так:

file1.csv
file2.csv
...

... что-то вроде этого ...:

 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. Вы можете найти для него немного другую комбинацию переключателей, которая лучше подходит для вашей задачи, чем я перечислил выше.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...