【SAS/プログラミング】KEEP,DROP。情報が多い中、必要な変数だけにすべし!

今回はステートメントです。KEEP,DROPを説明します。
変数が多くなりがちのデータセットですが、こちらで今後使用する変数のみにして、わかりやすいデータセットにするのは個人的にはかなり大切だと思います。

・KEEPステートメント
指定した変数を保持する。
・DROPステートメント
指定した変数を削除する。

<program code>
data [出力データセット];
  set [入力データセット];

  keep [変数1] [変数2] .....  ;
run;
dropも同じような形になります。
また上記以外でもkeepもしくはdropは、以下のようにも使用できます。
例1) data [出力データセット](keep [変数1] [変数2] .....);
例2) set [入力データセット](keep [変数1] [変数2] .....);
例3) proc sort data=[データセット](keep [変数1] [変数2] .....); by ..(以下略)
例3のようにプロシジャでも使うことができます。

keep,dropの使い分けとしましては、データセットの変数が多いことを前提条件としましてこれ以降の作業に、
必要となる変数の数が少ない場合、keep
必要となる変数の数が多く、不要な変数があまりない場合、drop
といったイメージです。

ちょっとした使い方ですが、変数名が例えばtemp1, temp2, temp3, temp4のような連番だった場合、下記のようにまとめることができます。
keep temp1 - temp3;
これでtemp1からtemp3の変数を保持するとなります。dropも同様です。
変数が多く、連番になっている場合は便利ですね。

また、作業ではあまり混合するとわかりにくいことから
keep、dropは一緒に使わないですが、一応順番的には
drop→keepの順番とのことです。

普段よくお世話になっていたSAS忘備録さまのサイトですね。
https://sas-boubi.blogspot.com/2016/07/rename.html


何故、僕がこの作業が重要かと言いますと、
データを結合する際に複数のデータセットで同じ変数があった場合、
後から結合するデータセットに上書きされてしまいますので、予期せぬ値になっていたりする。それを特定するのに時間がかかることもあるので要注意となります。
特に仕事では、自分のプログラムを違う誰かが引き継ぐこともあり、その際に余計な変数がいっぱいあると本当に必要な変数がどこなのか迷うこともあります。僕は相手のプログラムを引き継いだ際にこれにめちゃくちゃ苦労しました。。もう変数が50,60あった時は、なんでこんなに、、、と(笑)
一気にまとめて処理する気持ちはわかりますし、後でもしかしたら使うかもと思いましたが、その際は使う変数は10変数くらいだったので、だいぶ余分な変数が入ってました。なのでそれを調べるのにも時間がかかったという経験があります。
なので、作業途中のデータでも必要な変数のみにして作業することを心がけましょう。もし後で「あ、この変数必要かも」と思ったら、その時にkeepやdropで残したり、削除しないようにしましょう。
データが多い世の中、取捨選択はとても大事です!!

この記事が気に入ったらサポートをしてみませんか?