在Stata中累计计算一个变量

Cumulatively counting up a variable in Stata

我觉得这很简单。我有一个变量,它是这样的 [0, 1, 2, 3, 0, 1, 2, 0, 1],从 0 开始,递增然后重置。我需要能够跟踪每个观察值重置的数字。因此,对于该数据集,我期望的值为 [1, 1, 1, 1, 2, 2, 2, 3, 3]。我不太明白这一点。

我目前正在使用 Stata,但如果更容易的话,我会切换到 R。我有大约 50 万个观察结果,因此不胜感激。

在 R 中,使用 cumsum 非常简单。这基本上会在序列中遇到 0 时增加计数。

x <- c(0, 1, 2, 3, 0, 1, 2, 0, 1)
cumsum(x == 0)
#[1] 1 1 1 1 2 2 2 3 3

Stata 解决方案:

clear

input foo
0
1
2
3
0
1
2
0
1
end

generate wanted = sum(foo == 0)

list, separator(0)

     +--------------+
     | foo   wanted |
     |--------------|
  1. |   0        1 |
  2. |   1        1 |
  3. |   2        1 |
  4. |   3        1 |
  5. |   0        2 |
  6. |   1        2 |
  7. |   2        2 |
  8. |   0        3 |
  9. |   1        3 |
     +--------------+

这是另一个使用 findInterval 的基本 R 解决方案,即

findInterval(seq_along(x),which(x==0))
# [1] 1 1 1 1 2 2 2 3 3