我有一张桌子像:
Name | ID | Event
Smith| 1 |
Smith| 2 | Y
Smith| 3 |
Jones| 1 |
Jones| 2 | Y
Jones| 3 |
Jones| 4 | Y
我想计算每个人在每个点上看到事件的次数,例如:
Name | ID | Event | Event Count
Smith| 1 | | 0
Smith| 2 | Y | 1
Smith| 3 | | 1
Jones| 1 | | 0
Jones| 2 | Y | 1
Jones| 3 | | 1
Jones| 4 | Y | 2
我猜在sql中我不能这么做?如果不是,你能非常清楚我如何在SAS(或任何适当的方式)做这件事,因为我是新的!
(仅供参考,这使我能够区分在每个事件之前或之后发生的行,即filter by event=blank,以及在第一个事件之前发生的任何0,之后发生的任何1,等等。可能有一种更简单的方法可以做到这一点。)
谢谢!
最佳答案
如果您想沿着sas路径走下去,它会按顺序读取数据,因此非常适合这种类型的问题
data have;
infile datalines missover;
input Name $ ID Event $;
datalines;
Smith 1
Smith 2 Y
Smith 3
Jones 1
Jones 2 Y
Jones 3
Jones 4 Y
;
run;
proc sort data=have;
by name id;
run;
data want;
set have;
by name id;
if first.name then event_count=0;
event_count+(event='Y');
run;