Proc SQL Version = 9.4。没有窗口可以使用。
有客户ID,时间段(月),金额和相应的类。
client_id data_period amount class
1 200801 ……
不要尝试使用SQL进行顺序处理。它不是为此而建的。
在数据步骤中应该很容易。例如,让我们将您的打印输出转换为实际的SAS数据集,以便我们可以编写代码。
data have ; input client_id data_period amount class ; cards; 1 200801 30000 2 2 200801 17000 1 3 200801 9000 1 1 200802 30000 2 2 200802 55555 2 3 200802 11000 2 ;
让我们按客户和期间对其进行排序。
proc sort data=have ; by client_id data_period ; run;
现在只需设置数据并使用LAG()函数获取以前的值。 不确定你对GOOD和BAD的定义是什么,所以我只是根据你的20K规则创建了新的类变量。
data want ; set have ; by client_id; old_period = lag(data_period); old_class = lag(class); newclass = 1 + (amount > 20000) ; old_newclass = lag(newclass); if first.client_id then call missing(of old_:); bad = (class ne newclass) or (old_newclass ne old_class) ; run;
所以这是结果。
client_ data_ old_ old_ old_ id period amount class period class newclass newclass bad 1 200801 30000 2 . . 2 . 0 1 200802 30000 2 200801 2 2 2 0 2 200801 17000 1 . . 1 . 0 2 200802 55555 2 200801 1 2 1 0 3 200801 9000 1 . . 1 . 0 3 200802 11000 2 200801 1 1 1 1