在這個數據步驟我不明白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;
在這個數據步驟我不明白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 ,以及該數據集中的第十二行(在Z = 3的每一行上)。前兩次是當Y將要從1變爲2,以及當它即將從2變爲3.第三次是當X即將改變時 - 當Y即將改變時,LAST.Y觸發或者當它在BY列表之前的任何變量發生變化時。最後,數據集中的最後一行總是LAST(無論如何)。
在上面的特定數據集中,子集if意味着您只爲每組Ys取最後一行。在此代碼:
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的運作方式,你可以做的一件事就是使用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相同。
請參閱此處以獲取更多信息info。
這是一個子集IF語句的例子。這與IF/THEN聲明不同。它基本上意味着如果條件不成立,則立即停止數據步驟的迭代。
所以
if last.y;
相當於
if not last.y then delete;
或
if not last.y then return;
或
if last.y then do;
... rest of the data step before the run ...
end;
什麼是'first'和'在SAS究竟last'?某種物體?如果我嘗試做類似'ab = 6;'的錯誤'變量a不是一個對象。' – Tartaglia
首先。(變量)和最後一個(變量)是特殊變量,當BY語句是用過的。爲什麼他們使用點符號我不知道。點符號也用於其他一些事情(例如,散列對象),但SAS並不完全一致。 – Joe
@Joe:在last後回答我的問題。y'(可能發生多次,我確信這是)下一個if塊被執行,否則不會(如果不是'last.y')。正確嗎? – statquant