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
|
|