在Stata中,我目前拥有的数据集如下:
我正在尝试创建一个"尾随计数器"在B列中,它看起来像:
这里,计数器从1开始,每次a" 1"出现在A中,B加上一个值。
这似乎很简单,但我不确定如何准确地做到这一点。以下是我到目前为止所做的事情:
假设A列被称为" A"在Stata,
我用:
gen B = A + A[_n - 1]
但是,这给了我一些东西。我不知道该怎么办,有人会有任何提示吗?
答案 0 :(得分:4)
这是一种方式:
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功能。 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
。等等。