雖然我在閱讀使用SAS數據步驟時概念化程序數據向量的相當多內容,但我仍不明白分組處理時PDV是如何工作的。例如,如果我有數據集olddata
瞭解分組處理中的SAS PDV
GROUP VAL
A 10
A 5
B 20
而且我通過聲明呼籲它datastep用,如:
data newdata;
set olddata;
by group;
...
run;
那麼編譯器增加了兩個臨時變量的PDV:第一。組和last.group。當你在閱讀PDV任何教程,它會告訴你,在SET語句的第一關,PDV看起來像:
_N_ _ERROR_ FIRST.GROUP LAST.GROUP GROUP VAL
1 0 1 0 A 10
和LAST.GROUP爲零,因爲觀察1不是最後一個觀察在A組中。
這裏是我的問題:SAS如何知道這不是最後的觀察?
如果SAS正在逐行處理olddata
,PDV如何意識到下一行包含另一個組A觀察而不是新組?換句話說,SAS似乎必須使用來自之前或未來行的信息來更新FIRST
和LAST
變量,但我不知道如何。當BY
聲明被調用時,PDV如何保持行與行之間的值是否存在一些竅門?
謝謝喬。我們可能找到了類似的東西。令人失望的是,對PDV的數據步驟處理的描述顯然不完整。據推測,某種預讀緩衝區與PDV是分開的,但就像你說的那樣,似乎沒有任何關於發生什麼的好的描述。 – Carl 2013-03-05 20:29:24
使用SAS-L討論中的鏈接進行編輯。 – Joe 2013-03-05 20:51:57
感謝您的跟蹤。因此,對我來說,似乎很奇怪,在SAS中有類似於lead()這樣的函數的問題太多了。通常的基本原理是SAS的逐行處理模式。但是,如果有預讀機制,那麼似乎應該使用該機制來使用「lead()」或類似的函數。 – Carl 2013-03-05 21:04:08