Следующий макрос может сделать работу;
%macro procesFilesInRoot(rootFolder,fileExt,procesMacro);
%put "dir ""%unquote(&rootFolder)"" /s /b";
filename pipeTree pipe "dir ""%unquote(&rootFolder)"" /s /b" lrecl=32767;
data fullNames;
infile pipeTree truncover;
input fullName $char1000.;
ext = upcase(scan(fullName,countw(fullName, '.'), '.'));
if ext = "%upcase(&fileExt)";
run;
filename pipeTree clear;
title 'files found';
proc print;
run;
proc sql noprint;
select count(*) into :nrFiles from fullNames;
%let nrFiles = &nrFiles; /** to strip the leading blanks **/
%if &nrFiles %then %do;
select fullName into :fullName1-:fullName&nrfiles from fullNames;
%end;
quit;
%do fileNr = 1 %to &nrFiles.;
%&procesMacro(&&fullName&fileNr);
%end;
%mend;
Перед использованием, вам нужно написать макрос, который обрабатывает один входной файл;
%macro import1file(fullName);
%let fileName = %scan(&fullName,%sysfunc(countw(&fullName, '\')), '\');
%let fileExt = %scan(&fileName,%sysfunc(countw(&fullName, '.')), '.');
%let dataName = %substr(&fileName,1, %length(&fileName)-%length(&fileExt)-1);
proc import datafile = "&fullName" out=&dataName;
run;
%mend;
Затем вы можете использовать его следующим образом;
%procesFilesInRoot(D:\Horsten,txt,import1file);
1. делать все файлы имеют точно такую же структуру 2. Является ли это в ОС Windows или Unix 3. Можно ли запускать системные команды через SAS на компьютере, то есть X команды или трубы? – Reeza
Вам нужно привести более конкретный пример. Является ли «может содержать» (эффективно) случайным или узорчатым? Вы хотите прочитать все эти данные в ОДНОМ наборе данных или хотите прочитать их в 100 (или более) наборах данных? – Joe
Если вы хотите изучить, как схожие проблемы были затронуты другими, вы можете посмотреть [здесь] (http://www.sascommunity.org/wiki/SAS_Filesystem_Toolbox) – SRSwift