2014-02-19 81 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