在 Stata 中,我目前有一个数据集,如下所示:

enter image description here

我试图在 B 列中创建一个“尾随计数器”,使其看起来像:

enter image description here

这里,计数器从 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 + . = ..

第二个观察结果为 countervar1[2] + var1[1] = 0 + 0 = 0.

第五个观察结果为 countervar1[5] + var1[4] = 1 + 0 = 1.

第七个观察结果为 countervar1[7] + var1[6] = 0 + 0 = 0. 。等等。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top