SAS 讀取指定目錄下文件列表宏


OPTIONS PS=MAX LS=MAX NOCENTER SASMSTORE=SASUSER MSTORED MAUTOSOURCE;
/*獲取指定文件夾的指定類型的所有文件*/
%MACRO GET_NAME(DIRNAME,TYP,OUT_TABLE)/STORE;/*參數有兩個:路徑,文件類型后綴*/
%PUT %STR(----------->DIRNAME=&DIRNAME) ;
%PUT %STR(----------->TYP=&TYP) ;
DATA TEMP;
RC=FILENAME("DIR","&DIRNAME");/*把&DIRNAME值傳給文件引用符“DIR"*/
OPENFILE=DOPEN("DIR");/*得到路徑標示符OPENFILE,DOPEN是打開directory的sas內置函數*/
IF OPENFILE>0 THEN DO;/*如果OPENFILE>0表示正確打開路徑*/
NUMMEM=DNUM(OPENFILE);/*得到路徑標示符OPENFILE中member的個數nummem*/
DO II=1 TO NUMMEM;
NAME=DREAD(OPENFILE,II);/*用DREAD依次讀取每個文件的名字到NAME*/

filepath="&DIRNAME"||NAME;
fnum=compress(NAME,".xml","");
fnum=compress(fnum,"user_case","");

OUTPUT;/*依次輸出*/
END;
END;
KEEP NAME filepath fnum;/*只保留filepath、fnum列*/
RUN;

PROC SORT DATA=TEMP;/*按照NAME排序*/
BY DESCENDING NAME;
%IF &TYP^=ALL %THEN %DO;/*是否過濾特定的文件類型&TYP*/
WHERE INDEX(UPCASE(NAME),UPCASE(".&TYP"));/*Y,則通過檢索NAME是否包含&TYP的方式過濾文件類型*/
%END;
RUN;

DATA &OUT_TABLE(KEEP=NAME ID DIRECTORY);
LENGTH DIRECTORY $20.;
SET TEMP;
ID=_N_;
DIRECTORY="&DIRNAME.";
RUN;

PROC APPEND BASE=S.DIR DATA=&OUT_TABLE;
RUN;

RUN;
%MEND;

LIBNAME S '.';

%MACRO GETALL;
DATA _NULL_;
DO I='報告樣例及指標說明','數據字典';
CALL EXECUTE(CATS('%GET_NAME(.\'||I||',xlsx,DIR)'));
END;
DO I='報告樣例PDF版';
CALL EXECUTE(CATS('%GET_NAME(.\'||I||',pdf,DIR)'));
END;

**%GET_NAME(.\白皮書,pdf,DIR);
/*參數1:log文件所在位置
參數2:讀取文件類型
參數3:log文件名存儲的數據集名稱*/
%MEND;

%GETALL;

ODS HTML FILE='.\目錄.xls';
PROC PRINT DATA=S.DIR;
RUN;

ODS HTML CLOSE;


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM