継続的な業務データなどは,月次や日次などでファイルが分割されている場合が多くあります.
レイアウトが同じであれば,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;