Windows環境で任意のフォルダにある全ての外部ファイルをインポートする
[OS] Windows
[リリース] ALL
[キーワード] Base, DATA, PIPE, IMPORT
[質問]任意のフォルダにある全ての外部ファイルをインポートする方法はありますか。
[回答]
FILENAMEステートメントのPIPEエンジンとマクロを使用して、インポートできます。 FILENAME ファイル参照名 PIPE 'システムのコマンド'; 下記の例を参考にしてください。 /* サンプル外部ファイルの作成 */ /* EXTFILE1.txt作成 */ DATA _NULL_; FILE 'c:¥ExtFiles¥extfile1.txt'; PUT "05JAN2001 6 W12301 1.59 9.54"; PUT "12JAN2001 3 P01219 2.99 8.97"; RUN; /* EXTFILE2.txt作成 */ DATA _NULL_; FILE 'c:¥ExtFiles¥extfile2.txt'; PUT "02FEB2001 1 P01219 2.99 2.99"; PUT "05FEB2001 3 A00901 1.99 5.97"; PUT "07FEB2001 2 C21135 3.00 6.00"; RUN; /* EXTFILE3.txt作成 */ DATA _NULL_; FILE 'c:¥ExtFiles¥extfile3.txt'; PUT "06MAR2001 4 A00101 3.59 14.36"; PUT "12MAR2001 2 P01219 2.99 5.98"; RUN; /* DIRコマンドで、インポートするファイルが保存されている */ /* フォルダのファイル名リストを取得 */ FILENAME ExtFiles PIPE 'dir C:¥ExtFiles /b'; /* 全てのファイル名を入力して、それをマクロ変数にセット */ /* &FNAME変数にはファイル名のみ、&PEXT変数にはファイル名と拡張子をセット */ DATA _NULL_; INFILE ExtFiles TRUNCOVER END=last; LENGTH fname $20; INPUT fname; i+1; CALL SYMPUT('fname' || TRIM(LEFT(PUT(i,8.))),SCAN(TRIM(fname),1,'.')); CALL SYMPUT('pext' || TRIM(LEFT(PUT(i,8.))),TRIM(fname)); IF last THEN CALL SYMPUT('total',TRIM(LEFT(PUT(i,8.)))); RUN; /* ファイル名を変更しながらIMPORTプロシジャを実行するマクロを定義 */ %MACRO test; %DO i=1 %TO &total; PROC IMPORT DATAFILE="c:¥ExtFiles¥&&pext&i" OUT=work.&&fname&i DBMS=DLM REPLACE; DELIMITER=' '; GETNAMES=no; RUN; %END; %MEND; /* マクロの実行 */ %test |