SAS データ ステップを使用する場合のプログラム データ ベクトルの概念化についてかなり読んだことがありますが、グループ処理がある場合に PDV がどのように機能するかはまだわかりません。たとえば、データセットがある場合olddata
GROUP VAL
A 10
A 5
B 20
そして、次のような by ステートメントでデータステップを呼び出します。
data newdata;
set olddata;
by group;
...
run;
次に、コンパイラは PDV に first.group と last.group の 2 つの一時変数を追加します。PDV に関するチュートリアルを読むと、SET ステートメントの最初のパスで PDV が次のようになることがわかります。
_N_ _ERROR_ FIRST.GROUP LAST.GROUP GROUP VAL
1 0 1 0 A 10
また、観測 1 はグループ A の最後の観測ではないため、LAST.GROUP はゼロです。
ここに私の質問があります: SAS は、これが最後の観測ではないことをどのように知っていますか?
SAS がolddata
行ごとに処理している場合、PDV は次の行に新しいグループではなく別のグループ A の観測が含まれていることをどのように認識しますか? つまり、SAS は前または将来の行の情報を使用して変数FIRST
とLAST
変数を更新する必要があるようですが、その方法はわかりません。BY
ステートメントが呼び出されたときに PDV が行ごとに値を保持する方法にトリックはありますか?