2014-02-19 83 views
0

我正在使用以下代碼將文件名從目錄寫入數據集。目前它讀入該目錄中的所有文件名。我在試圖弄清楚如何僅讀入特定文件名時遇到困難。例如,我怎樣才能返回像'abc%.txt'這樣的文件?SAS - 僅讀取某些文件名

代碼:

%macro get_filenames(location); 
filename _dir_ "%bquote(&location.)"; 
data filenames(keep=fname); 
    handle=dopen('_dir_'); 
    if handle > 0 then do; 
    count=dnum(handle); 
    do i=1 to count; 
     fname=dread(handle,i); 
     output filenames; 
    end; 
    end; 
    rc=dclose(handle); 
run; 
filename _dir_ clear; 
%mend; 


%get_filenames("c:\temp\"); 

回答

0

可以過濾任何文件名的數據集(避免了修改宏)或在宏(這將是更有效的)。

爲清楚起見,我建議修改文件名數據集,除非你有一個特別大的目錄..

data new: 
set filenames; 
if substr(fname,1,3)='abc' and scan(fname,2,'.')='txt'; 
run; 

另外,修改宏:

%macro get_filenames(location); 
filename _dir_ "%bquote(&location.)"; 
data filenames(keep=fname); 
    handle=dopen('_dir_'); 
    if handle > 0 then do; 
    count=dnum(handle); 
    do i=1 to count; 
     fname=dread(handle,i); 
     /* custom filter */ 
     if substr(fname,1,3)='abc' and scan(fname,2,'.')='txt' then output filenames; 
    end; 
    end; 
    rc=dclose(handle); 
run; 
filename _dir_ clear; 
%mend; 
+0

完美,謝謝。我很接近。我試圖在宏中類似if/then,但我並不認爲使用substr和scan。 – user2941280