在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
我觉得这很简单。我有一个变量,它是这样的 [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