Обработка нескольких файлов последовательно в SAS - PullRequest
0 голосов
/ 08 февраля 2019

У меня есть программа, которая начинается с:

%let filename = file1.csv

Программа затем импортирует файл в набор данных sas и затем перемещает некоторые данные в таблицу sql на основе некоторых правил.

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

1 Ответ

0 голосов
/ 08 февраля 2019

Это пример процесса, который может выиграть от создания макроса.Похоже, ваш существующий код близок к готовности стать макросом.Просто оберните существующий код в определение макроса, которое принимает FILENAME в качестве параметра (удалите оператор% let).

Тогда ваша существующая программа может стать чем-то вроде этого.Где последняя строка - это та, которая фактически выполняет шаги, определенные в определении макроса.

%macro loadfile(filename=);
   ... existing code ....
%mend loadfile;
%loadfile(filename=file1.csv);

Чтобы расширить ее для загрузки всех файлов в каталоге, вам просто нужно сгенерировать список файлов и использовать списокгенерировать серию вызовов к макросу.Так что-то вроде этого может работать на компьютере с Windows.Поэтому он будет вызывать команду Windows DIR, чтобы получить список файлов и прочитать результат в переменную, и для каждого найденного файла сгенерировать вызов макроса.Команды, нажимаемые CALL EXECUTE, будут выполняться после завершения шага данных.

data _null_;
   infile 'dir /b *.csv' pipe truncover ;
   input filename $256. ;
   call execute(cats('%nrstr(loadfile)(filename=',filename,')'));
run;  
...