このデータステップでは、何をするのかわかりif last.y
ません...教えていただけますか?
data stop2;
set stop2;
by x y z t;
if last.y; /*WHAT DOES THIS DO ??*/
if t ne 999999 then
t=t+1;
else do;
t=0;
z=z+1;
end;
run;
LAST.Y は、Y の値が変化する直前の行を参照します。したがって、次のデータセットでは:
data have;
input x y z;
datalines
1 1 1
1 1 2
1 1 3
1 2 1
1 2 2
1 2 3
1 3 1
1 3 2
1 3 3
2 3 1
2 3 2
2 3 3
;;;;
run;
LAST.Y は、そのデータセットの 3 番目、6 番目、9 番目、12 番目の行 (Z=3 の各行) で発生します。最初の 2 回は、Y が 1 から 2 に変化しようとしているときと、2 から 3 に変化しようとしているときです。3 回目は、X が変化しようとしているときです。 BY リスト内のその前の変数が変更されたとき。最後に、データセットの最後の行は常に LAST です。
上記の特定のデータセットでは、サブセット if は、Y の各グループの最後の行のみを取得することを意味します。このコードでは:
data want;
set have;
by x y z;
if last.y;
run;
次のデータセットになります。
data want;
input x y z;
datalines;
1 1 3
1 2 3
1 3 3
2 3 3
;;;;
run;
最後に。
FIRST と LAST がどのように動作するかを確認したい場合にできることの 1 つは、 を使用することPUT _ALL_;
です。例えば:
data want;
set have;
by x y z;
put _all_;
if last.y;
run;
データセットの FIRST.(何でも) と LAST.(何でも) を含むすべての変数が表示されます。(FIRST.Y と LAST.Y は実際には変数です。)
SASでは、まず。そして最後。データ ステップ内で暗黙的に作成される変数です。各変数には最初のものがあります。そしてラスト。DATA ステップの各レコードに対応します。これらの値は 0 または 1 になります。last.y は、last.y = 1 の場合と同じです。
詳しくはこちらをご覧ください。