1

私のデータセットの観察には、各プレーヤーの動きの履歴が含まれています。ゲームの前半と後半で、事前に定義された長さ (2、3、および 3 つ以上) の連続した一連の動きの数を数えたいと思います。シーケンスはオーバーラップできません。つまり、シーケンス 1111 は、長さ 2 の 2 つのシーケンスではなく、長さ 4 のシーケンスと見なされます。つまり、次のような観測の場合:

+-------+-------+-------+-------+-------+-------+-------+-------+
| Move1 | Move2 | Move3 | Move4 | Move5 | Move6 | Move7 | Move8 |
+-------+-------+-------+-------+-------+-------+-------+-------+
|     1 |     1 |     1 |     1 | .     | .     |     1 |     1 |
+-------+-------+-------+-------+-------+-------+-------+-------+

…次の変数を生成する必要があります。

Number of sequences of 2 in the first half =0 
Number of sequences of 2 in the second half =1
Number of sequences of 3 in the first half =0
Number of sequences of 3 in the second half =0
Number of sequences of >3 in the first half =1 
Number of sequences of >3 in the second half = 0

このタスクを進める方法について 2 つの選択肢がありますが、どちらも最終的な解決にはつながりません。

オプション 1: 文字列を使用するという Nick の戦術的な提案 ( Stata: 変数全体で同じ値が連続して発生する最大数) を詳しく説明し、すべての「move*」変数を連結して、部分文字列の開始位置を特定しようとしました。

egen test1 = concat(move*)
gen test2 = subinstr(test1,"11","X",.) // find all consecutive series of length 2

オプション 1 にはいくつかの問題があります。(1) シーケンスが重複しているケースを考慮していません (「1111」は 2 の 2 つのシーケンスとして認識されます) (2) 結果の文字列 test2 を短くして、X の位置がもはや対応しないようにします。 test1 の開始位置 (3) 3 を超える長さのシーケンスをチェックする必要がある場合、部分文字列の可変長は考慮されません。

オプション 2: 変数の補助セットを作成して、事前定義された固定長の 1 の連続セット (セット) の開始位置を識別します。前の例に基づいて、長さ 2 のシーケンスをカウントするために、取得しようとしているのは、一連のシーケンスが特定の動きで開始された場合は 1 になり、それ以外の場合は 0 になる変数の補助セットです。

+-------+-------+-------+-------+-------+-------+-------+-------+
| Move1 | Move2 | Move3 | Move4 | Move5 | Move6 | Move7 | Move8 |
+-------+-------+-------+-------+-------+-------+-------+-------+
|     0 |     0 |     0 |     0 |     0 |     0 |     1 |     0 |
+-------+-------+-------+-------+-------+-------+-------+-------+

私のコードは次のようになりますが、連続したオカレンスのカウントを再開しようとすると壊れます:

quietly forval i = 1/42 {
gen temprow`i' =.
egen rowsum = rownonmiss(seq1-seq`i') //count number of occurrences
replace temprow`i'=rowsum 
mvdecode seq1-seq`i',mv(1) if rowsum==2 
drop rowsum
}

誰かがタスクを解決する方法を知っていますか?

4

1 に答える 1