在定义新变量时,有没有办法在 SAS/SQL 中引用先前观察值?

Is there a way of referencing the prior observation's values in SAS/SQL when defining a new variable?

我有 table 个回头客,如果距离上次购买已超过 30 天,我想为每个客户 ID 添加一个标记。按ID和日期升序排列。

CustomerID        Date
001               02/15/2022
001               03/01/2022
002               01/19/2022
002               02/11/2022
002               03/30/2022
...

我想以

结束
CustomerID        Date           Flag
001               02/15/2022     N
001               03/01/2022     N
002               01/19/2022     N
002               02/11/2022     N
002               03/30/2022     Y
...

我能想到的唯一方法是引用上一行。这是说明我的意思的伪代码。

IF (CUSTOMERID = PRIOR.CUSTOMERID) AND (DATE - PRIOR.DATE >= 30) THEN FLAG = 'Yes'

但是,在浏览了一些之后,我不确定如何在 SAS 中完成此操作,无论是在数据步骤中还是在过程中 sql。我假设有一些方法可以保存前一行的值,但我对此并不熟悉。

这就是 LAG() 函数的用途。 LAG() 函数 returns 上次调用时保存的值。因此,如果您为每次观察调用它,那么结果就是前一次观察的值。只需确保不要在某些观察中跳过 运行 LAG() 函数,否则返回的值将不是先前观察的值。

data want;
  set have;
  by customerid date;
  if not first.customerid and (date-30 )> lag(date) then flag='YES';
  else flag='NO';
run;

结果

       Customer
Obs       ID             Date    flag

 1       001       2022-02-15    NO
 2       001       2022-03-01    NO
 3       002       2022-01-19    NO
 4       002       2022-02-11    NO
 5       002       2022-03-30    YES