题
在 Stata 中,我目前有一个数据集,如下所示:
我试图在 B 列中创建一个“尾随计数器”,使其看起来像:
这里,计数器从 1 开始,每当 A 中出现“1”时,B 就会增加一个值。
这似乎很简单,但我不确定具体如何做到这一点。这是我到目前为止所做的:
假设A列在Stata中称为“A”,
我用:
gen B = A + A[_n - 1]
但是,这给了我一些启发。我不确定如何继续,有人有任何提示吗?
解决方案
这是一种方法:
clear all
set more off
*----- example data -----
input ///
var1
0
0
0
0
1
0
0
1
0
0
0
end
list, sep(0)
*----- what you want -----
gen counter = sum(var1) + 1
list, sep(0)
这 sum()
函数会给你一个累积和。看 help sum()
. 。这是一个非常基本的 Stata 函数。A search sum
很快就能送你到那里。
您的方法失败了,因为您只是将每个观察值的“当前”值相加 A
与自身之前的值。那 听起来可能 就像一个累计总和,但仔细想想,你会发现事实并非如此。
根据您的代码和我的数据,结果将是:
+----------------+
| var1 counter |
|----------------|
1. | 0 . |
2. | 0 0 |
3. | 0 0 |
4. | 0 0 |
5. | 1 1 |
6. | 0 1 |
7. | 0 0 |
8. | 1 1 |
9. | 0 1 |
10. | 0 0 |
11. | 0 0 |
+----------------+
第一个观察结果为 counter
不见了 (.
)。这是因为第一次观察没有先前的值 var1
, ,所以 Stata 做了类似的事情 var1[1] + var1[0] = 0 + . = .
.
第二个观察结果为 counter
是 var1[2] + var1[1] = 0 + 0 = 0
.
第五个观察结果为 counter
是 var1[5] + var1[4] = 1 + 0 = 1
.
第七个观察结果为 counter
是 var1[7] + var1[6] = 0 + 0 = 0
. 。等等。
不隶属于 StackOverflow