2016年6月22日水曜日

【DROP・KEEPステートメント】データセットから特定の変数を削除または残す




※ データステップのMODIFYステートメントなど、特定の機能を用いるとDROP, KEEPステートメントが動作しないことがあるので注意。




DROPステートメント

指定した変数を出力データセットに「含めない」ようにする

data DT2;
   set SASHELP.CLASS;
   drop NAME AGE;
run;

💬 
  • 通常のステートメントはPDVという「一時的な処理スペース」で実行されますが、DROPステートメントは「一時的な処理スペース」の結果を「出力データセットへ書き込む時」に実行します
  • つまり、最終的に適用されるイメージです。また適用されるタイミングが決まっているので、DROPステートメントを記述する位置は関係ありません(プログラムの先頭や最後に書いても挙動は変わらない)




KEEPステートメント

指定した変数のみ」出力データセットに「含める」ようにする

data DT1;
   set SASHELP.CLASS;
   keep NAME AGE;
run;

💬 
  • DROPステートメントと同様、KEEPステートメントは記述する位置に関係なく、「出力データセットへ書き込む時」に実行します(詳細は上のDROPステートメントの説明を参照)




テクニック

過去にいくつかテクニックを紹介しています。

ATTRIBとKEEPを使った基本コンボ
変数名をいっきに指定する方法 [まとめ]



また、上の2つ目のリンク記事内にある「:(コロン)」を使ったよくやるテクニックを紹介。

やりたい事
「データステップ内で作った一時的な変数を最終的にまとめてDROPしたい」


こういった場合、まとめてDROPしたい変数の名前の先頭に 「tmp_」 とかつけておいて、「DROP tmp_: ;」 と書いてしまえば、最後に「tmp_○○」の変数をまとめて削除できちゃいます。
(たまにやっちゃうミスですが、既存の消したくない変数に「tmp_○○」というのがあったらそれも消えちゃうので気をつけてください)



data DT3;
   set SASHELP.CLASS;
   _A = 1;
   _B = 2;
   drop _: ;
run;


上の例では先頭に「_」のつく変数をまとめて削除しています。


0 件のコメント:

コメントを投稿