塔塔:使用EGEN,anycount()时的值对于每个观测变化(Stata: Using egen,

2019-10-18 13:56发布

在我的数据中的每个观测提出谁遵循一些随机模式的玩家。 变量move1了代表上移动每个球员是活跃。 我需要统计的时​​间每个玩家活跃人数:

数据如下所示(与_count表示我想生成一个变量)。 招式的数量也可以根据不同的模拟。

+------------+------------+-------+-------+-------+-------+-------+-------+--------+
| simulation | playerlist | move1 | move2 | move3 | move4 | move5 | move6 | _count |
+------------+------------+-------+-------+-------+-------+-------+-------+--------+
|          1 |          1 |     1 |     1 |     1 |     2 | .     | .     |      3 |
|          1 |          2 |     2 |     2 |     4 |     4 | .     | .     |      2 |
|          2 |          3 |     1 |     2 |     3 |     3 | 3     | 3     |      4 |
|          2 |          4 |     4 |     1 |     2 |     3 | 3     | 3     |      1 |
+------------+------------+-------+-------+-------+-------+-------+-------+--------+

egen联合anycount()是不适用在这种情况下,因为用于参数value()的选择是不是一个常数整数。

我已经通过每个观察和使用,企图周期egen横行(见下文),但它一直count他为失踪人(如初始化),是不是很有效(我在50000个意见)。 有没有办法在Stata做到这一点?

gen _count =.  
quietly forval i = 1/`=_N' {  
    egen temp = anycount(move*), values( `=`playerlist'[`i']')
    replace _count = temp
    drop temp
}

Answer 1:

您可以轻松地切出在观察循环。 此外, egen仅用于方便,从来没有加快。

gen _count = 0 
quietly forval j = 1/6 {  
    replace _count = _count + (move`j' == playerlist)
} 

要么

gen _count = move1 == playerlist 
quietly forval j = 2/6 {  
    replace _count = _count + (move`j' == playerlist)
} 

即使你已经确定使用egen ,循环只需要过度的重复值playerlist ,不是所有的意见。 说,最大为42

gen _count = 0 
quietly forval k = 1/42 { 
    egen temp = anycount(move*), value(`k') 
    replace _count = _count + temp  
    drop temp 
} 

但是,这仍然是你的问题,一个糟糕的方法。 (我写的原anycount()所以我可以说,为什么它被写。)

又见http://www.stata-journal.com/sjpdf.html?articlenum=pr0046的工作横行的审查。

PS你的代码包含错误。

replace由在最后观察计数最后一个计算值在所有观测的计数变量。

值与当地的宏相比playerlist 。 你想必有名称的没有本地宏,所以宏被评估为空。 其结果是,你在你的每个值进行比较,最终move*变量与观察数字。 你想用的变量名playerlist ,但单引号强制宏解释。

根据记录,这两种修复的bug:

  gen _count = .  
  quietly forval i = 1/`=_N' {  
      egen temp = anycount(move*), values(`= playerlist[`i']')
      replace _count = temp in `i' 
      drop temp
  }


文章来源: Stata: Using egen, anycount() when values vary for each observation
标签: stata