【SAS/プログラミング】First,last~複数行の中の特徴的な行はどれだ!!
今回はFirst,Lastステートメントの説明です。
SASの処理上では1行ごとにプログラムが実行されますが、
複数(グループ)レコードがある時、最初,最後のレコードの情報が知りたい。または前の値を残した上で計算したい。という場合に使用されるステートメントです。
これはものすごく使いますので、このステートメントを使いこなせたら、なんか進んだなぁと思えるのではないでしょうか。少なくとも僕はこれで実感しました(笑)
以下のサンプルデータ(Samp_data001)があります。
今回、無償の SAS® ソフトウェアを使用してみました。
このサンプルデータを使用したprogram codeと実行結果です。
/* <program code 01> */
/* Sort Dataset */
proc sort data=Samp_data001; by id type; run;
/* Process */
data Output_dataset;
set Samp_data001;
by ID type;
if first.ID then fstflg=1; /* 最初のIDに関する処理 */
if last.ID then lstflg=1; /* 最後のIDに関する処理 */
run;
<実行結果>
まず、first,lastステートメントを使う値をソートする必要があります。順番に並んでいないと、何のグループ変数の最初と最後が決められない為です。
Firstの対象はIDですので、
最初のIDグループに対して変数fstflgに1を格納
最後のIDグループに対して変数fstflgに1を格納
使い方としましては、IDの最初のデータを調べたいときや
グループ毎の処理(グループ毎の合計値など)に使用します。
なお、グループ変数は複数あっても良いので、
例えばIDかつtype毎の最初、最後のデータが見たいという場合、
byで対象にしておいた上で、first,lastステートメントの変数を変えます。
/*<program code 02>*/
Data Output_dataset;
Set Samp_data001;
By ID type;
If first.type then fstflg=1; /* 最初のTypeに関する処理 */
If last.type then lstflg=1; /* 最後のTypeに関する処理 */
Run;
<実行結果>
対象をIDからtypeに変えることで最初と最後のレコードのターゲットを変えることができます。
Byにあてる変数とステートメントに使用する変数を確認しつつ使用する形となります。
対象変数の最後の行の情報が欲しいとか、最後の行に対して・・・の処理をするなど処理の幅が広がる感じがなんだか嬉しい気分にさせるそんなステートメント。
いつも初心を忘れず、最後まで気を抜かない!
そんな感じでしょうかね。(笑)