Stata:当每个观测的值不同时,使用egen,anycount() [英] Stata: Using egen, anycount() when values vary for each observation

查看:17
本文介绍了Stata:当每个观测的值不同时,使用egen,anycount()的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我的数据中的每一次观察都显示了一个遵循某种随机模式的玩家。变量move1up表示每个玩家处于活动状态的动作。我需要计算每个玩家的活动次数:

数据如下所示(_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 |
+------------+------------+-------+-------+-------+-------+-------+-------+--------+

egenanycount()组合不适用于此情况,因为value()选项的参数不是常量整数。

我尝试循环每个观察并按行使用egen(见下文),但它将count保留为缺失(在初始化时),并且效率不高(我有50,000个观察)。在Stata中有办法做到这一点吗?

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

推荐答案

您可以很容易地省去观测中的循环。此外,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以查看逐行工作。

附注:您的代码包含错误。

replace您在所有观察中的计数变量,使用为最后观察中的计数计算的最后一个值。

值与本地宏playerlist进行比较。您可能没有该名称的本地宏,因此该宏的计算结果为空。结果是将move*变量的每个值与观察数字进行比较。您本应使用变量名playerlist,但单引号强制宏解释。

根据记录,这修复了两个错误:

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

这篇关于Stata:当每个观测的值不同时,使用egen,anycount()的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆