首页 > 解决方案 > 删除日期两天内发生的行

问题描述

又是我。解释这个有点棘手,但我会尽力而为。我有一个数据集,其中包含客户 ID、呼叫这些客户的天数和一个虚拟列,其中 1 是我们与人交谈的时间,而 0 是我们不与人交谈的时间。

data Have;
input ID callDate :ddmmyy. Contacted ;
format callDate ddmmyy10.;
datalines4;
001 30/11/2020 0
001 01/12/2020 1
001 30/12/2020 1
001 31/12/2020 1
001 01/01/2021 1
002 01/02/2021 1
002 02/02/2021 1
002 15/02/2021 1
;;;
run;

data Want;
input ID callDate :ddmmyy. Contacted ;
format callDate ddmmyy10.;
datalines4;
001 01/12/2020 1
001 01/01/2021 1
002 02/02/2021 1
002 15/02/2021 1
;;;
run;

我基本上只想保留成功联系的记录,并且在第二天或后天没有成功联系。

例如,对于像这样的连续天:

day 1 - 0
day 2 - 1
day 3 - 0
day 4 - 1
day 5 - 0
day 6 - 1

我最终只会保留第 6 天。

我什至不知道从哪里开始真正......在python中我会创建穿过行的嵌套循环,但proc sql我不知道如何处理这个问题。

如果有任何想法至少给我一个推动,我将不胜感激。

标签: sqlsasproc-sql

解决方案


您可以使用针对自身的相关子查询从表中进行选择。

SQL 将执行您在 python 中编写的所有循环。

例子:

proc sql;
  create table want as
  select * from have as each
  where
    not exists (
      select * from have as self
      where self.calldate between each.calldate + 1 and each.calldate + 2 /* follow up */
        and self.contacted = 1                                            /* with an assertion of contact */
      )
  ;

推荐阅读