1

mar2009.txt、mar2010.txt、mar2011.txt、mar2012.txt の 4 つのカンマ区切りファイルがあります。

ライブラリをクレンジングして、それらのデータセットを動的にインポートしようとしています:

libname my "C:\Users\Owner\Desktop\SAS\";

data A; // I do not this step but if I do not use it the the "do" becomes red in color
do i = 2009 to 2012;

proc datasets library=my;
delete mar.&i;
run;

proc import out=my.mar.&i datafile="C:\Users\Owner\Desktop\SAS\mar.&i.txt" dbms=dlm replace;
delimiter='2c'x;
getnames=yes;
datarow=2;
run;

end;
run;
4

1 に答える 1

2

基本的なレベルで質問に答えるために、データセットを再インポートするという理由だけでデータセットを「クレンジング」する必要はありません。自動的に置き換えられます。

次のように、インポートを行うマクロを作成できます。

%macro import_myfile(i=);
proc import file="...whatever...\mar&i.txt" out=mar_&i. dlm=',' replace;
run;
%mend import_myfile;

%import_myfile(i=2009);
%import_myfile(i=2010);
%import_myfile(i=2011);
%import_myfile(i=2012);

2009 年から 2012 年までそれを実行するループを作成することもできますが、4 回実行するだけではコードの価値がありません。実行する動的な数値があり、それらの値がデータセットにある場合は、次のようにすることができます。

data data_torun;
input filenum;
datalines;
2009
2010
2011
2012
;;;;
run;

proc sql;
select cats('%import_myfile(i=',filenum,')') into :listtorun 
 separated by ' '
 from data_torun;
quit;

&listtorun.;
*this will become the same four calls as above;

通常、このようなデータは、変更される可能性がある場合 (ループ内であっても)、コードではなくデータセット形式で保持することをお勧めします。そうすれば、これをテキストファイルに保存して読み込むことができます。

于 2013-07-31T20:12:14.440 に答える