Skip to main content

first変数とlast変数

  • dataステップ内でbyステートメントを適用すると、byステートメントで指定した列ごとに「first.列名」および「last.列名」の列が生成される。
  • それぞれ、下記の値が格納されている。
    • first.列名 ... byステートメントでグループ化された各行のうち、最初の行にのみ'1'が格納されており、それ以外は'0'
    • last.列名 ... byステートメントでグループ化された各行のうち、最後の行にのみ'1'が格納されており、それ以外は'0'
  • この変数を使用すると、「最初だけ処理、最後だけ処理」といった処理を行わせることができる。

``` sas
proc sort data=sashelp.fish out=work.fish_sorted;
by species;
run;

data work.fish;
set work.fish_sorted(where=(not missing(Weight))); /* 欠損値の行を削除 */
by species; /* species列でグループ化 */

/* 計算用の列を初期化 */
if first.species then do;
count = 0;
weight_sum = 0;
end;

/* グループ内の行について、件数と合計を計算 */
retain count weight_sum;
count = count + 1;
weight_sum = weight_sum + Weight;

/* 平均値を計算し、行を出力 */
if last.species then do;
weight_avg = round(weight_sum / count, 0.1);
output;
end;

/* 出力したい列を指定 */
keep species count weight_sum weight_avg; 
run;