数値(文字)変数にのみ一括で特定の値を割り当てる話

直接ご質問いただいた内容へのご回答になります。

データセット中の文字型変数の値はそのままで、数値型変数のみ全て1に置き換える処理を書きたいのですが、指定するデータセットに含まれる数値変数の数や名前は可変で、全てが文字型変数であることも考えられる状況です。エラーにならない方法を教えてください。
また、欠損値にする方法もあれば併せて教えてください。

といった内容でした。

多分、他にも方法ありそうなんですが、僕がぱっと思いついたのは

data Q1;
X=2;Y='A';Z=3; output;
X=1;Y='B';Z=4; output;
run;






といったデータセットがあったとして

data A1;
 set Q1;
 array AR _numeric_;
 do over AR;
  AR=1;
 end;
run;






でいかがでしょうか?数値変数のX Zだけ値が変わってます。

「非明示添字配列と do over LOOPの利用」
http://sas-tumesas.blogspot.jp/search/label/do%20over

で紹介した方法を応用しています。

_numeric_(省略形は、_num_)はデータセット中の全ての数値変数、
_character_(省略形は、_char_)は文字変数、
_all_は文字通り全てです。
ちなみに、仮に全てが文字型変数で、数値型がなかったとしてもエラーにはなりません
「WARNING: 要素なしで配列を定義します。」はでますが。



次に、欠損値ということなら、配列組むまでもなく

data A2;
set Q1;
dummy=.;
call missing (of _numeric_);
drop dummy;
run;

でいけます。

dummyをかましているには、この場合は、数値変数が全くないと、引数不足でcall missingが
エラーになっちゃうからです。








0 件のコメント:

コメントを投稿