2018年8月30日木曜日

【効率を意識したプログラム】KEEPやDROPの利用




DROPとKEEPを活用しようっていう話です。



Sample data
data test;
   length col1-col200 $200.;
   array ar(*) col:;
   do i=1 to dim(ar);
       ar(i) = "abcdefg";
   end;
   do i=1 to 50000;
      output;
   end;
run;


200個の文字変数を持つ、50000obsのデータセットを作りました。



このデータセットを以下のようにSETした時の処理時間とCPU時間を見てみます。

data out1;
   set test;
run;

ログ
       処理時間           1.95 秒
       ユーザーCPU時間    0.32 秒
       システムCPU時間    1.64 秒



ここで例えば変数col1~col10だけが必要な変数だったとしたら、、

data out1;
   set test (keep=col1-col10);
run;

ログ
       処理時間           0.85 秒
       ユーザーCPU時間    0.03 秒
       システムCPU時間    0.83 秒


SETする時に読み込む変数をKEEPかDROPで絞ると、処理時間などが少し短くなります。





また、データステップ中に作成した一時変数や、使わなくなった変数は以下のように、、

data out1;
   set test ;
   keep col1-col10;
run;


または

data out1 (keep=col1-col10);
   set test ;
run;

データセットへ出力する時に変数をKEEPかDROPで絞ってサイズを軽量化すれば、その後このデータセットを読み込む時の処理時間なども短くなる事が期待できますよね。




このように効率を意識しながら、KEEP・DROPを指定する場所を使い分ける事がポイントです。

まぁ軽いデータだったり、実行に時間がかからないプログラムだったら、ここまで意識してKEEP・DROPを使わなくてもいいと思います。(多用しまくるとプログラムがごちゃっとした見た目になりがちだし)



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



0 件のコメント:

コメントを投稿