【问题标题】:Stata: Cumulative number of new observationsStata:新观察的累积数量
【发布时间】:2013-11-11 15:37:48
【问题描述】:

我想检查一个值是否出现在同一列的前一行中。 最后,我想对不同观察次数进行累积计数。

除了合并所有 _n 行并使用正则表达式之外,还有其他解决方案吗?我通过连接行到达那里,但鉴于字符串变量的限制为 244 个字符(在 Stata 。

这是我现在正在做的事情:

gen tmp=x
replace tmp = tmp[_n-1]+ "," + tmp if _n > 1
gen cumu=0
replace cumu=1 if regexm(tmp[_n-1],x+"|"+x+",|"+","+x+",")==0
replace cumu= sum(cumu)

例子

        +-----+
        |  x  | 
        |-----|
     1. |  12 |
     2. |  32 |
     3. |  12 |
     4. |  43 |
     5. |  43 |
     6. |  3  |
     7. |  4  |
     8. |  3  |
     9. |  3  |
    10. |  3  |
        +-----+

变成

        +-------------------------------+
        |  x  | tmp                     |
        |-----|--------------------------
     1. |  12 |  12                     |
     2. |  32 |  12,32                  |
     3. |  12 |  12,32,12               |
     4. |  43 |  3,32,12,43             |
     5. |  43 |  3,32,12,43,43          |
     6. |  3  |  3,32,12,43,43,3        |
     7. |  4  |  3,32,12,43,43,3,4      |
     8. |  3  |  3,32,12,43,43,3,4,3    |
     9. |  3  |  3,32,12,43,43,3,4,3,3  |
    10. |  3  |  3,32,12,43,43,3,4,3,3,3|
        +--------------------------------+ 

最后

        +-----------+
        |  x  | cumu|
        |-----|------
     1. |  12 |  1  |
     2. |  32 |  2  |
     3. |  12 |  2  |
     4. |  43 |  3  |
     5. |  43 |  3  |
     6. |  3  |  4  |
     7. |  4  |  5  |
     8. |  3  |  5  |
     9. |  3  |  5  |
    10. |  3  |  5  |
        +-----------+ 

关于如何避免“中间步骤”的任何想法(对我来说,在 x 中使用字符串而不是数字时这一点非常重要)。

谢谢!

【问题讨论】:

    标签: regex stata


    【解决方案1】:

    正则表达式很棒,但在这里和其他地方一样,简单的计算就足够了。使用您的示例数据

    .输入 x X 1. 12 2. 32 3. 12 4. 43 5. 43 6. 3 7. 4 8. 3 9. 3 10. 3 11. 结束 文件结束

    您可以识别每个不同值的首次出现:

    . gen long order = _n . bysort x (order) : gen first = _n == 1 .排序 . l +--------------------+ | x 先订购 | |--------------------| 1. | 12 1 1 | 2. | 32 2 1 | 3. | 12 3 0 | 4. | 43 4 1 | 5. | 43 5 0 | |--------------------| 6. | 3 6 1 | 7. | 4 7 1 | 8. | 3 8 0 | 9. | 3 9 0 | 10. | 3 10 0 | +--------------------+

    到目前为止看到的不同值的数量只是使用sum()first 的累积总和。这也适用于字符串变量。事实上,这个问题是

    中讨论的几个问题之一

    http://www.stata-journal.com/sjpdf.html?articlenum=dm0042

    .pdf 格式可供所有人访问。 search distinct 会向您指出这篇文章。

    熟练掌握使用by:sort_n_N 可以做什么是Stata 的一项重要技能。另见

    http://www.stata-journal.com/sjpdf.html?articlenum=pr0004

    对于所有人都可以访问的另一篇文章。

    【讨论】:

    • 出色的尼克!我有这种感觉,必须有“简单”的解决方案!谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-08-26
    • 2018-10-07
    • 1970-01-01
    • 1970-01-01
    • 2021-05-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多