data A0;
X=1;
run;
data A1;
X=1;
run;
data A2;
X=1;
run;
data A3;
X=1;
run;
とりあえず、データセットのよろずごとはproc datasetsにお任せって感じで、以下のようにかけます。
proc datasets;
change A0=Z;
quit;
でも個人的にproc datasetsあんまり好きじゃないです。なんか文法が特殊で覚えにくいです。
changeステートメントなんて、ぱっとでてきません。
僕はもっぱら
data _null_;
rc=rename('A1','B1','data');
run;
rename関数使います。
rename関数のいいところは、たとえば
data list;
OLD='A2';NEW='C2';output;
OLD='A3';NEW='C3';output;
run;
のように、現在のデータセット名と、リネーム後のデータセット名をリスト化したものを
データセットとして作成しておけば後は
data _null_;
set list;
rc=rename(OLD,NEW,'data');
run;
って感じで、百個だろうが二百個だろうが、一瞬でリネームできます。
dictionaryテーブルなどから現在のデータセット名の情報をとってきて、
一定のルールにしたがって(先頭にアンダースコア付けるとか、末尾に連番とか)の
処理を仕掛けたい時に重宝します。
まあ、データが小さければ、その都度新規にデータセット作ってもいいと思いますが。
あ、ちなみに、rename関数はデータセット以外でも、ファイル名やフォルダ名変えたり、色々できます。
あと、たまに質問いただきますが rc=はreturn codeの略でリターンコードです。
処理がうまくいけば「0」が入ります。なので、0じゃなかったらputで「うまくいきませんでした」的な
メッセージを出すようにすれば、どの処理が失敗したかを判別できます。
今 _null_で作っていますが、これを適当なデータセット名にして、listのoldの値を、存在しないデータセット何して、実行した後、作成されたデータセットのrcの値を見てもらえばわかりやすいと思います。
SCL関数とよばれるやつらは、みんなこういう形態をとります。
ハッシュオブジェクト扱う時のrc=とか、インデックスとかでやりくりするときの
IORC=(Input Output Return Codeの略)とかと、全く同じようなものです。
0 件のコメント:
コメントを投稿