【问题标题】:How can I create a trailing count for binary data in Stata?如何在 Stata 中为二进制数据创建尾随计数?
【发布时间】:2014-07-28 23:58:13
【问题描述】:

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

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

这里,计数器从 1 开始,每当 A 中出现“1”时,B 就会增加一个值。

这似乎很简单,但我不知道该怎么做。这是我到目前为止所做的:

假设A列在Stata中称为“A”,

我用:

gen B = A + A[_n - 1]

但是,这让我有些失望。我不知道如何继续,有人有什么建议吗?

【问题讨论】:

标签: stata


【解决方案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函数。 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。以此类推。

【讨论】:

    猜你喜欢
    • 2011-12-10
    • 2020-09-25
    • 2017-03-04
    • 1970-01-01
    • 1970-01-01
    • 2012-08-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多