1

私のデータの各観測は、ランダムなパターンに従うプレーヤーを示しています。変数move1up は、各プレイヤーがアクティブだった移動を表します。各プレイヤーがアクティブだった回数をカウントする必要があります。

データは次のようになります (_count生成したい変数を表しています)。移動回数もシミュレーションによって異なります。

+------------+------------+-------+-------+------- +------+-------+-------+--------+
| | シミュレーション | プレイヤーリスト | 移動1 | 移動2 | 移動3 | 移動4 | 移動5 | 移動6 | _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この場合、オプションの引数が整数定数ではないため、 combined withanycount()は適用できません。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
}
4

1 に答える 1

3

観測のループを簡単に切り取ることができます。また、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*変数の各値を観測値と比較して終了します。変数 name を使用するつもりplayerlistでしたが、一重引用符によってマクロの解釈が強制されます。

記録として、これにより両方のバグが修正されます。

  gen _count = .  
  quietly forval i = 1/`=_N' {  
      egen temp = anycount(move*), values(`= playerlist[`i']')
      replace _count = temp in `i' 
      drop temp
  }
于 2013-08-31T07:31:39.647 に答える