прочитайте имя всех файлов в данном каталоге и найдите шаблон с помощью SAS

#sas

#sas

Вопрос:

У меня есть следующая задача в SAS. Ggiven — это файл Excel, который я импортировал в SAS. В одном столбце «looking_date» указана интересующая меня дата.

введите описание изображения здесь

С другой стороны, есть каталог («C:myWork «), содержащий много файлов. введите описание изображения здесь

Имя каждого файла в этом каталоге содержит дату и другую часть, которая всегда может отличаться.

ПОЭТОМУ я пробую это в форме алгоритма:

  1. найдите каждую дату в столбце «looking_date»
  2. проверьте каталог «C:myWork » (вид сопоставления с шаблоном) если дата из «looking_date» встречается в имени одного файла, импортируйте файл с указанием даты в качестве имени

Я понятия не имею, как я могу реализовать оба описанных выше шага. Сначала я подумал, что прочитал имя всех файлов из этого каталога, однако у меня все еще есть проблема с шаблоном имени! Я благодарен за каждый намек, чтобы иметь возможность начать

Комментарии:

1. Ваше требование к проверке шаблонов неясно. Также, пожалуйста, опубликуйте, что вы пробовали.

Ответ №1:

Для чтения каталога в операционной системе вы можете использовать data step следующее:

 %let path_to_catalog=C:myWork;

data files;
    /* define a directory */
    rc = filename("mydir","amp;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 resu<
    set files;
    date = input(substr(filename, 1, 8), ddmmyy8.);
    if date in (amp;dates) then output;
run;
  

Комментарии:

1. Почему я получаю из первой части пустую таблицу. единственное отличие: %пусть path_to_catalog=\vol1statist_prodDatenbank_ZIKArchiv; файлы данных; /* определите каталог / rc = filename(«Archiv»,»amp;\vol1statist_prodDatenbank_ZIK»); / откройте каталог / did = dopen(«Archiv»); / проверьте, открыто ли оно */

2. введите свой путь только в %let инструкции, например %let path_to_catalog=\vol1statist_prodDatenbank_ZIK;

3. Роберт, я сделал это, однако я получаю пустую таблицу, затем я проверил часть без «if did> 0», код не запускается в цикл. Я думаю, это проблема. Как я могу проверить, правильно ли он выглядит?

4. Я попробовал: %let path_to_catalog=\ftai06vol1statist_prodDatenbank_ZIKArchiv; файлы данных; /* определите каталог / rc = filename(«mydir»,»amp;path.»); / откройте каталог / did = dopen(«mydir»); / проверьте, есть лион открыт / test= did; / закрыть каталог */ rc = dclose(did); удалить rc did; выполнить; результат ‘did’ = 0