在这个数据步骤中,我不明白做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;
Run Code Online (Sandbox Code Playgroud)
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;
Run Code Online (Sandbox Code Playgroud)
LAST.Y将出现在该数据集中的第三行,第六行,第九行和第十二行(在Z = 3的每一行上).前两个时间是当Y是大约从1改变为2,并且当它是约从2改变为3.第三时间是当X是即将改变- LAST.Y触发当Y是即将改变或当BY列表中的任何变量更改时.最后,数据集中的最后一行总是最后一行.(无论如何).
在上面的特定数据集中,子集化if表示您只取每组Y的最后一行.在这段代码中:
data want;
set have;
by x y z;
if last.y;
run;
Run Code Online (Sandbox Code Playgroud)
您最终会得到以下数据集:
data want;
input x y z;
datalines;
1 1 3
1 2 3
1 3 3
2 3 3
;;;;
run;
Run Code Online (Sandbox Code Playgroud)
在末尾.
如果您想了解FIRST和LAST如何运作,您可以做的一件事就是使用PUT _ALL_;.例如:
data want;
set have;
by x y z;
put _all_;
if last.y;
run;
Run Code Online (Sandbox Code Playgroud)
它将显示所有变量,包括FIRST.(无论如何)和LAST.(无论如何)数据集.(FIRST.Y和LAST.Y实际上是变量.)