複数の外部ファイルの読み込み

Last-modified: 2008-10-24 (金) 08:40:48

継続的な業務データなどは,月次や日次などでファイルが分割されている場合が多くあります.
レイアウトが同じであれば,INFILEステートメントに複数の外部ファイルを割り当てる事で,1つのDataステップで処理することができます.
ひとつは,ファイル名の指定に,ワイルドカード(*,?)を使い,該当するすべてのファイルを入力ファイルに割り当てます.もうひとつの方法では,FILENMAMEステートメントの中で,ワイルドカードや,ファイル名の列記を使って,ファイル参照名に複数のファイルを割り当て,そのファイル参照名をINFILEステートメントで指定します.

**********************************************************
readmultifile.sas
081023 翔
複数の外部ファイルを読み込む
**********************************************************;


options nocenter;

/* サンプルを3ファイル生成*/

data _null_;
  file "sales200805.csv" dlm=",";
  do i=100 to 103;
  x1=ranuni(0);x2=ranuni(0);
  put i x1 x2;
  end;
  file "sales200806.csv" dlm=",";
  do i=200 to 202;
  x1=ranuni(0);x2=ranuni(0);
  put i x1 x2;
  end;
  file "sales200807.csv" dlm=",";
  do i=300 to 304;
  x1=ranuni(0);x2=ranuni(0);
  put i x1 x2;
  end;
run;


/* 方法その1 ファイル名にワイルドカードを使い,
               複数の外部ファイルを指定*/

data sales;
  infile "sales2008*.csv" dlm=",";
  input i x1 x2;
run;

/*
NOTE: 入力ファイル "sales2008*.csv" :
      ファイル名=C:\Documents and Settings\kfujim_2\sales200805.csv,
      File List=C:\Documents and Settings\kfujim_2\sales2008*.csv,
      レコードフォーマット=V,論理レコード長=256

NOTE: 入力ファイル "sales2008*.csv" :
      ファイル名=C:\Documents and Settings\kfujim_2\sales200806.csv,
      File List=C:\Documents and Settings\kfujim_2\sales2008*.csv,
      レコードフォーマット=V,論理レコード長=256

NOTE: 入力ファイル "sales2008*.csv" :
      ファイル名=C:\Documents and Settings\kfujim_2\sales200807.csv,
      File List=C:\Documents and Settings\kfujim_2\sales2008*.csv,
      レコードフォーマット=V,論理レコード長=256
 */


/* 方法その2 FILENAMEステートメントで,ファイル参照名を指定する方法*/

filename sales  ("sales200805.csv","sales200806.csv","sales200807.csv");
*filename sales  "sales2008*.csv"; /*ワイルドカードを使ってもよい*/

data sales;
  infile sales dlm=",";
  input i x1 x2;
run;