2

このデータステップでは、何をするのかわかり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;
4

3 に答える 3

6

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 は実際には変数です。)

于 2013-01-14T14:41:34.080 に答える
0

SASでは、まず。そして最後。データ ステップ内で暗黙的に作成される変数です。各変数には最初のものがあります。そしてラスト。DATA ステップの各レコードに対応します。これらの値は 0 または 1 になります。last.y は、last.y = 1 の場合と同じです。

詳しくはこちらをご覧ください

于 2015-11-13T20:29:58.997 に答える