2015年4月10日金曜日

「FIRST.BY変数」と「LAST.BY変数」で、グループ毎の最初と最後のオブザベーションを特定する。


SASの基本的な機能でよく使われる、一時変数 「FIRST.BY変数」「LAST.BY変数」 を解説したいと思います。

まずは例をご覧ください。

*** サンプルデータ作成 ;
data DT1;
  input A$ B C;
cards;
001 1 1
001 1 2
001 2 1
001 2 2
002 1 1
002 1 2
002 2 1
002 2 2
;
run;











*** 変数Aの値毎に、最初と最後のオブザベーションにフラグを立てる ;
proc sort data=DT1;
   by A B C;
run;

data DT2;
   set DT1;
   by A B C;
   if  first.A=1 then FLG1=1;
   if  last.A=1 then FLG2=1;
run;




解説

データステップ内にBYステートメントが書いてあると、「FIRST.BY変数」と「LAST.BY変数」という一時変数が利用可能になります。

今回の例では、BYステートメントで

   by A B C;

と書くと、BY変数A, B, C に対応する以下の一時変数が利用可能になります。

「first.A」, 「last.A」
「first.B」, 「last.B」
「first.C」, 「last.C」

これらの一時変数について、以下にイメージを示します。


①「first.A」 「last.A」のイメージ














②「first.B」 「last.B」のイメージ














③「first.C」 「last.C」のイメージ




ちなみに、2つ注意点

・ 一時変数なので、データステップ内でしか存在しません。(データセット化した時にはなくなってます)

・ あと、みなまで言うなって感じかもですが、BYステートメントで指定した変数の順に、あらかじめソートされている必要があります。

0 件のコメント:

コメントを投稿