1

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

除了连接所有 _n 行并使用正则表达式之外,还有其他解决方案吗?我通过连接行到达那里,但考虑到字符串变量的限制为 244 个字符(在 Stata <13 中),这有时是不适用的。

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

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而不是数字时,这一点非常重要)。

谢谢!

4

1 回答 1

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 |
     +--------------------+

到目前为止看到的不同值的数量只是firstusing的累积总和sum()。这也适用于字符串变量。事实上,这个问题是其中讨论的几个问题之一

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

所有人都可以以 .pdf 格式访问它。search distinct会指出你这篇文章。

熟练掌握 , 和 可以做什么by:sortStata_n_N的一项重要技能。也可以看看

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

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

于 2013-11-11T16:11:05.693 回答