文章內容截取于SAS編程:Dopen系列函數介紹。
我使用以下路徑文件進行演示,路徑中有4個.sas文件、4個.log文件,以及1個文件夾,共9個文件。
過程涉及以下3個函數:
1. DOPEN()
DOPEN函數的作用是,打開一個路徑,并返回一個路徑標識值 (Opens a , and a value)。
這可以理解為,在一次SAS會話中,給路徑發放身份證明,這個證明跟路徑是一一對應的,就像人的身份證一樣。人有了身份證,可以進行諸如乘高鐵、坐飛機的活動,路徑有了“身份證”sas刪除路徑下的文件,也可以進行一些特定的活動,例如獲取一些路徑屬性信息。
函數的參數值是一個文件引用(),這個文件引用必須在調用函數前與特定的路徑進行關聯,常用的文件關聯方式有兩種:
第1種,全局語句:
filename dirpath "E:\99_Test\Test\test1";
第2種,函數:
data test;
fileres = filename("dirpath", "E:\99_Test\Test\test1");
run;
如果關聯成功,會返回0;如果關聯失敗,會返回非0值。
文件引用關聯成功后,就可以使用DOPEN函數打開sas刪除路徑下的文件,函數在該SAS會話中,返回路徑對應的“身份證號”。
**dopen;

%let dirpath = E:\99_Test\Test\test1;
data tmp;
fileres = filename("dirpath","&dirpath");
dirid = dopen("dirpath");
run;
Dopen
函數返回0值,說明文件引用關聯成功。Dopen函數返回的路徑“身份證號”的值為1。
其他信息可以參考SAS文檔:SAS Help : DOPEN 。
2. DNUM(-id)
DNUM函數的作用是,返回路徑內文件數量( the of in a )。
例如,演示路徑下有9個文件,DNUM函數對該路徑的“身份證號”進行處理,返回值應該是9。
**dnum;
%let dirpath = E:\99_Test\Test\test1;

data tmp;
fileres = filename("dirpath","&dirpath.");
dirid = dopen("dirpath");
num = dnum(dirid);
run;
dnum
其他信息可以參考SAS文檔:SAS Help : DNUM
3. DREAD(-id, nval)
DREAD函數的作用是,讀取路徑下文件的名稱( the name of a )。這是獲取文件名稱的主要步驟。
DREAD函數有2個參數,一個是路徑的“身份證號”,一個是路徑內文件的位序,文件位序的排序為文件名的字符排序。
演示路徑下有9個文件,對應的,也就是可以讀取到9個文件的名稱。
**dread;
%let dirpath = E:\99_Test\Test\test1;
data tmp;

fileres = filename("dirpath","&dirpath.");
dirid = dopen("dirpath.");
length direct filename filepath $200;
direct = "&dirpath";
ord = 1;
filename =dread(dirid, 1);
filepath = catx("\", direct, filename);
output;
ord = 2;
filename =dread(dirid, 2);
filepath = catx("\", direct, filename);
output;
……

ord = 9;
filename =dread(dirid, 9);
filepath = catx("\", direct, filename);
output;
run;
Dread
一一讀取文件比較繁瑣,由于DNUM函數可以獲取路徑內文件數目,基于此可以使用Do循環進行讀取文件名稱,路徑名稱與文件名拼接可以獲得文件路徑。
**dread;
%let dirpath = E:\99_Test\Test\test1;
data tmp;
fileres = filename("dirpath","&dirpath.");
dirid = dopen("dirpath");
num = dnum(dirid);

length direct filename filepath $200;
direct = "&dirpath.";
if dirid > 0 then do;
do i = 1 to num;
filename = dread(driid, i);
filepath = catx("\", direct,filename);
ord = i;
output;
end;
end;
drop i;
run;
循環讀入結果與上面相同。
其他信息可以參考SAS文檔:SAS Help : DREAD 。
以上步驟,就完成了使用SAS獲取路徑中的文件名稱,如果想篩選特定后綴的文件,直接在數據集中進行篩選。