2017年10月18日水曜日

外部ファイルをいっぺんに読み込んで連結する【FILEVAR=】



まえに、以下の記事を書きました。
外部ファイルをいっぺんに読み込んで連結する。


今回は別のやり方(INFILEステートメントの FILEVAR=オプション を使った方法)を紹介します。
まず以下のCSVファイルがあったとします。


C:\sample\TEST1.csv
001,a,11
002,b,22

C:\sample\TEST2.csv
003,c,33
004,d,44



手順1
まずは読み込みたいテキストファイルのフルパスをデータセットに格納します。

data DT1 ;
   length VAR $500. ;
   VAR="C:\sample\test1.csv"; output;
   VAR="C:\sample\test2.csv"; output;
run;
VAR 
 C:\sample\test1.csv 
 C:\sample\test2.csv



手順2
上記のテキストファイルのフルパス情報を使って、テキストファイルを読み込んでいきます。

data OUT1;

  *--- テキストファイルのフルパスが格納されたデータセットをSET ---;
  set DT1;

  *--- フルパスが格納された変数VARを filevar= に指定 ---;
  *--- end=で各テキストファイルの終端を検知する一時変数を作成 ---;
  infile dummy filevar=VAR end=EOF dsd truncover;

  *--- テキストファイルの終端を検知するまでループ ---;
  length A B $10. C 8.;

  do while (not EOF);
     input A B C;
     output;
  end;

run;

 B  
 C  
 001 
 a
 11
 002
 b 
 22
 003
 c
 33
 004
 d
 44


📝注意点

上の例で「do while (not 一時変数名)」の部分を「do until (一時変数名)」と書くと正しく読み込めない場合があります
(読み込む外部ファイルのいずれかが空だと、そこでデータステップが終了してしまい、以降の外部ファイルが読み込まれないという落とし穴がある)


📝その他ポイント

ちなみに、この記事の先頭にも貼ったリンク

の方法だと、読み込むファイルのヘッダー部分を「firstobsオプション」でスキップさせたい場合に、うまく動かないのですが、今回の記事の方法だとうまくスキップ出来ます。



0 件のコメント:

コメントを投稿