阿娜塔哇 发表于 2022-7-29 12:14 
这个的实现逻辑可不可以讲一下
核心代码是:
逻辑如下:
1. 对当前 ID 的第一条观测,即满足 id^=lag(id) 的观测,将变量 g 赋初始值 1;
2. 对当前 ID 的其它观测,当 num 发生变化时,即满足 num^=lag(num) 时,将变量 g 的值增加 1;
这里利用了一些特性,使得程序简短,但也要求更深刻的理解,实际是否这样使用,可以自行评估。
1. var^=lag(var):该表达式判断变量在当前观测和上一条观测的值是否相同,相同返回1,不同返回0;
2. g+var^=lag(var):该表达式中,+运算优先级最高,但它是从右向左进行评估,因此,首先评估右侧这个比较运算表达式,返回 0 或 1,然后式子转化为 g+0 或 g+1;
3. g+0 或 g+1:这是 SAS 中独特的累加赋值运算,注意这是一个赋值表达式,但省去了=。此时,变量 g 的值将不会被 PDV 的迭代初始化为缺失值,也就是说,表达式 g+1 等价于:retain g 0; g=g+1;