如何修改以其他变量的最大值为条件的变量

How to modify a variable conditioned on max value of other variable

我有一个长格式数据集:ID、时变变量、时间和结果 (y)。

受试者由于不同的时间和不同的结果值而具有不同的行数,0,1或2。但是我只需要保留与最后一个时间点对应的结果值,并将所有其他结果行替换为0 .

我不知道如何 gen 一个新变量 = outcome only for max(time) by ID

id  sbp y   time
1   120 1   0
1   126 1   1
1   126 1   2
1   126 1   3 
1   126 1   4
1   132 1   5
1   132 1   6
1   132 1   7
1   150 1   8
1   150 1   9
1   150 1   10
1   160 1   11
1   160 1   12
1   160 1   13
1   160 1   14

您似乎在问完全不同的事情:

  1. 将每个面板的最后一个之前的结果值替换为 0。

  2. 只保留最后一个。

轮到他们了:

bysort id (time) : replace y = 0 if _n < _N 
by id: keep if _n == _N 

如果您只想要第二个,则需要 bysort id (time) 而不是 by id