如何将此SAS数据步骤转换为条件计数器列的oracle sql?
我为这个问题的一般性道歉。我试图创建一个列,根据当前观察和上一次观察之间的时间将行分组在一起。下面的代码是我编写的在SAS中正常工作的代码。但是,由于数据步骤的运行方式与oracle sql的运行方式不同,我不知道如何在oracle sql中实现这一点。任何帮助都将不胜感激如何将此SAS数据步骤转换为条件计数器列的oracle sql?,sql,plsql,sas,Sql,Plsql,Sas,我为这个问题的一般性道歉。我试图创建一个列,根据当前观察和上一次观察之间的时间将行分组在一起。下面的代码是我编写的在SAS中正常工作的代码。但是,由于数据步骤的运行方式与oracle sql的运行方式不同,我不知道如何在oracle sql中实现这一点。任何帮助都将不胜感激 DATA GROUP; SET LAG1; BY CUSTOMER_KEY; IF (TIME_BTW>5 OR TIME_BTW=.) THEN JOURNEY=0; JOURNEY+1; IF FIRST.CUS
DATA GROUP;
SET LAG1;
BY CUSTOMER_KEY;
IF (TIME_BTW>5 OR TIME_BTW=.) THEN JOURNEY=0;
JOURNEY+1;
IF FIRST.CUSTOMER_KEY THEN GROUP=0;
IF JOURNEY=1 THEN GROUP+1;
RUN;
看起来你是在根据时间定义组。你似乎想要一个分析函数。我认为代码是这样的:
select t.*,
sum(case when time_btw > 5 then 1 else 0 end) over (partition by customer_key order by ??) as grp
from t;
请注意,与SAS不同,SQL中的表表示无序集。这意味着您需要一个列来指定顺序。编辑您的问题,并提供示例数据和所需结果。对不起,我在过去20分钟内一直在尝试以可读的方式格式化示例数据,但我无法找到有意义的解决方案。我快到了!对于团体来说,这很好。唯一的问题是,如果有多个OB的时间_btw>5,那么它们也共享相同的grp编号。我将开始尝试对其进行修改,看看会发生什么。