我有如下所示的数据。在一段时间内挑选列值的每一次出现
MSISDN DATE NET_TYPE
11111 01/01/2017 1
11111 02/01/2017 1
11111 03/01/2017 1
11111 04/01/2017 2
11111 05/01/2017 2
11111 06/01/2017 2
11111 07/01/2017 2
11111 08/01/2017 2
11111 09/01/2017 1
11111 10/01/2017 1
11111 11/01/2017 1
11111 12/01/2017 1
11111 13/01/2017 1
11111 14/01/2017 2
11111 15/01/2017 2
11111 16/01/2017 2
我找的,我创建一个新的变量,它可以帮助挑选NET_TYPE的每一个首次和最后出现在一段时间(日期值是不固定的解决方案,NET_TYPE可以为天1或2或数月或数年)。我看到的解决方案如下。
MSISDN DATE NET_TYPE INDICATOR
11111 01/01/2017 1 1
11111 02/01/2017 1 0
11111 03/01/2017 1 1
11111 04/01/2017 2 1
11111 05/01/2017 2 0
11111 06/01/2017 2 0
11111 07/01/2017 2 0
11111 08/01/2017 2 1
11111 09/01/2017 1 1
11111 10/01/2017 1 0
11111 11/01/2017 1 0
11111 12/01/2017 1 0
11111 13/01/2017 1 1
11111 14/01/2017 2 1
11111 15/01/2017 2 0
11111 16/01/2017 2 1
如果您能提供解决方案是SAS很有帮助。
代码中,我已经尝试过,不SAS工作:
SELECT *,
CASE
WHEN net_type <> COALESCE(Lag(net_type, 1)
OVER (
partition BY sub_no
ORDER BY dt), 99) THEN dt
END AS starting,
CASE
WHEN net_type <> COALESCE(Lag(net_type, 1)
OVER (
partition BY sub_no
ORDER BY dt DESC), 99) THEN dt
END AS ending
FROM table
ORDER BY dt
StackOverflow旨在帮助编码人员使用他们的代码。我们不根据您的规格书写解决方案。如果你有迄今为止尝试过的代码,我们可能会提供帮助。 – Assafs
我不需要完整的解决方案,提示将很好解决。我第一次尝试。最后。使用proc分类变量,但没有解决。我想这样select *,min(dt)over(net_type分区),max(dt)over(分区by net_type)from sandbox.santhosh –
select *, case net_type <> coalesce(lag(net_type,1 )OVER(通过sub_no ORDER BY dt划分),99)然后dt结束作为开始, 当net_type <> coalesce(lag(net_type,1)OVER(partition by by sub_no ORDER BY dt desc)通过DT 结束 从表顺序 我都试过,但它只能在分贝,但不是在SAS –