byにgroupformatをつけて、フォーマット値によるfirst last処理をする話

ソートされたデータをbyで指定してsetするとfirst lastを利用した処理ができます。first lastはあくまでby変数の値によって0 1が立つのですが、groupformatオプションを使うと、値そのものではなくフォーマットされた値の切り替わりに依存させるととができます。

例えば

proc format;
value FMT 1-<4 ='GR1'
 4-<8 ='GR2'
 8-10 ='GR3'
;
run;

適当にフォーマット作って

data Q1;
call streaminit('777');
do i=1 to 15;
 X=round(rand('uniform')*10,0.1);
 _X=X;
 drop i;
 output;
end;
run;






















データ作って

proc sort data=Q1;
by X;
run;

ソートして

data A1;
format X FMT.;
set Q1;
by X groupformat;
FIRST=first.X;
LAST=last.X;
run;






















と、こんな感じです。

これを使うとフォーマットで区切った範囲でのfirst lastを使った処理ができるわけですね。
あんまり使ったことないですが、工夫すると、なかなか使えそうな機能ですね。

0 件のコメント:

コメントを投稿