データセット名を変更する。SCL関数のrenameで、変更前後の名前リストを参照して一括変更する方法

データセットの名前を変えます。

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 件のコメント:

コメントを投稿