#sas
#sas
Вопрос:
У меня есть следующая задача в SAS. Ggiven — это файл Excel, который я импортировал в SAS. В одном столбце «looking_date» указана интересующая меня дата.
С другой стороны, есть каталог («C:myWork «), содержащий много файлов.
Имя каждого файла в этом каталоге содержит дату и другую часть, которая всегда может отличаться.
ПОЭТОМУ я пробую это в форме алгоритма:
- найдите каждую дату в столбце «looking_date»
- проверьте каталог «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