虽然我已经阅读了很多关于在使用 SAS 数据步骤时概念化程序数据向量的内容,但我仍然不明白 PDV 在分组处理时是如何工作的。例如,如果我有数据集olddata
GROUP VAL
A 10
A 5
B 20
我用 by 语句调用它的 datastep,例如:
data newdata;
set olddata;
by group;
...
run;
然后编译器将两个临时变量添加到 PDV:first.group 和 last.group。当您阅读有关 PDV 的任何教程时,它会告诉您在 SET 语句的第一遍中,PDV 将如下所示:
_N_ _ERROR_ FIRST.GROUP LAST.GROUP GROUP VAL
1 0 1 0 A 10
并且 LAST.GROUP 为零,因为观察 1 不是 A 组中的最后一个观察。
这就是我的问题:SAS 怎么知道这不是最后一次观察?
如果 SASolddata
逐行处理,PDV 如何知道下一行包含另一个 A 组观察而不是新组?换句话说,SAS 似乎必须使用来自先前或未来行的信息来更新FIRST
和LAST
变量,但我不确定如何。BY
在调用语句时,PDV 如何在一行之间保留值是否有一些技巧?