2017年11月10日金曜日

【小ネタ】インデックス使ってSORTプロシジャを省略する


以下をご覧ください。

data CLASS;
  set SASHELP.CLASS;
run;

proc sort data=CLASS;
  by AGE;
run;

proc transpose data=CLASS out=TRA;
  var NAME;
  by AGE;
run;

プログラム自体は適当に書いたやつですが、
変数AGEごとにTRANSPOSEをするために、予めSORTプロシジャでAGE順に並び替えています。




このSORTが煩わしくて、よく以下のように直前のデータステップでついでにインデックスを定義しておいて、SORTプロシジャを省略させてます。

data CLASS (index=(AGE));
  set SASHELP.CLASS;
run;

proc transpose data=CLASS out=TRA;
  var NAME;
  by AGE;
run;

インデックスとして定義した変数は、事前に並び替えせずにBY変数として使える性質を利用しています。



ただし、SORTプロシジャ使って並び替えたデータの方が、その後の処理では内部的に処理効率がよい場合もある点は気に留めておいてください。

0 件のコメント:

コメントを投稿