根据开始日期计算ID

时间:2018-07-14 04:33:26

标签: count sas

我有一个看起来像这样的源表

我从第一个日期开始计算Pd的ID,然后转到第二个日期,然后检查是否为Pd,然后添加ID,转到第三个日期,然后检查前一个日期的Pd是否更改,是否改变计数他们到新的小组。请查看所需的输出。你能帮忙吗?

谢谢

1 个答案:

答案 0 :(得分:1)

在单次通过解决方案中,您需要跟踪EditText之前的每个ID 。进行此跟踪后,您将

  • 根据inv之前的ID减少inv的计数
  • 根据当前inv的ID来增加inv的计数
  • 在跟踪器中,将inv之前的ID替换为当前inv

ID的数量是动态的,并且先验未知,并且inv值查找之前的ID都键入ID。用于动态查找的最佳DATA Step功能是inv

此外,由于计数输出是基于HASH值的枢轴,因此您要么需要

  • 具有一系列的if / then或select / when语句来增加/减少inv的计数
  • 将数据输出为inv date invcount

数据

Proc TRANSPOSE

示例代码

嵌套的DOW循环用于测试输入数据的结尾,并确保每个日期(该组)有一行输出

data have; 
format id 4. date yymmdd10. inv $2.;
input id date yymmdd10. event $ e_seq inv ; datalines;
100 2018-01-01  In  1   Pd
101 2018-01-01  In  1   Pd
102 2018-02-04  In  1   Pd
100 2018-02-07  N   2   NG
101 2018-02-14  P   2   G
101 2018-02-18  A   3   Pd
100 2018-03-15  A   3   Pd
102 2018-05-01  P   2   G
103 2018-06-03  In  1   Pd
run;