首页 > 解决方案 > 仅显示在一列中按组更改的连续观察值

问题描述

我有下面的数据集,我只想显示 Centre_code 根据客户的 Contract_No 更改的连续行。

数据集 1

  Date Customer Contract_No Centre_code
    09Jul19 AAAAA AAAAA1234 319
    10Jul19 AAAAA AAAAA1234 319
    11Jul19 AAAAA AAAAA1234 102
    09Jul19 AAAAA AAAAA5678 102
    10Jul19 AAAAA AAAAA5678 102
    11Jul19 AAAAA AAAAA5678 319
    09Jul19 BBBBB BBBBB1234 515
    10Jul19 BBBBB BBBBB1234 515
    11Jul19 BBBBB BBBBB1234 515
    09Jul19 BBBBB BBBBB11878 511
    10Jul19 BBBBB BBBBB11878 511
    11Jul19 BBBBB BBBBB11878 515
    10Jul19 BBBBB BBBBB48741 511
    10Jul19 BBBBB BBBBB48741 511
    11Jul19 BBBBB BBBBB48741 515

数据集 2

Date Customer Contract_No Centre_code
10-Jul-19 AAAAA AAAAA1234 319
11-Jul-19 AAAAA AAAAA1234 319
12-Jul-19 AAAAA AAAAA1234 319
13-Jul-19 AAAAA AAAAA1234 319
14-Jul-19 AAAAA AAAAA1234 319
15-Jul-19 AAAAA AAAAA1234 319
16-Jul-19 AAAAA AAAAA1234 319
17-Jul-19 AAAAA AAAAA1234 319
18-Jul-19 AAAAA AAAAA1234 319
19-Jul-19 AAAAA AAAAA1234 319
20-Jul-19 AAAAA AAAAA1234 319
21-Jul-19 AAAAA AAAAA1234 319
22-Jul-19 AAAAA AAAAA1234 102

期望输出数据集 1

Date Customer Contract_No Centre_code
10Jul19 AAAAA AAAAA1234 319
11Jul19 AAAAA AAAAA1234 102
10Jul19 AAAAA AAAAA5678 102
11Jul19 AAAAA AAAAA5678 319
10Jul19 BBBBB BBBBB11878 511
11Jul19 BBBBB BBBBB11878 515
10Jul19 BBBBB BBBBB48741 511
11Jul19 BBBBB BBBBB48741 515

期望输出数据集 2

   Date Customer Contract_No Centre_code
    21-Jul-19 AAAAA AAAAA1234 319
    22-Jul-19 AAAAA AAAAA1234 102

标签: sasdatasetrows

解决方案


如果通过

Center_code 更改的连续行

您的意思是您想查看更改前的观察结果和更改后的观察结果,您可以使用 FIRST.CENTER_CODE 和 LAST.CENTER_CODE 标志。(确保使用 NOTSORTED 关键字,因为记录是按 DATE 排序的,而不是 CONTRACT_NO 值中的 CENTER_CODE。)如果您还消除了第一个中心代码的第一个观察值和最后一个中心代码的最后一个观察值,那么您将只获得合同至少有一个变化。

data want;
  set have ;
  by customer contract_no center_code notsorted ;
  if (last.center_code and not last.contract_no) 
     or (first.center_code and not first.contract_no)
  ;
run;

推荐阅读