Наблюдения в моем наборе данных содержат историю ходов для каждого игрока. Я хотел бы подсчитать количество последовательных серий ходов некоторой заранее определенной длины (2, 3 и более 3 ходов) в первой и второй половинах игры. Последовательности не могут перекрываться, т.е. последовательность 1111 следует рассматривать как последовательность длины 4, а не 2 последовательности длиной 2. То есть, для наблюдения, например так:Stata: подсчет числа последовательных вхождений заданной длины
+-------+-------+-------+-------+-------+-------+-------+-------+
| 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
у меня есть два возможных варианты того, как приступить к этой задаче, но ни один из этих приводит к окончательному решению:
Вариант 1: Уточняя тактическое предложение Ники использовать строки (Stata: Maximum number of consecutive occurrences of the same value across variables), я иметь конкатена Ted все «MOVE *» переменные и попытался определить начальную позицию подстроки:
egen test1 = concat(move*) gen test2 = subinstr(test1,"11","X",.) // find all consecutive series of length 2
Есть несколько проблем с Вариантом 1: (1) он не учитывает случаи с перекрытием последовательностей («1111» распознается как 2 последовательности из 2) (2) он сокращает итоговый тест строки2, так что положения X больше не соответствуют начальным позициям в test1 (3), он не учитывает переменную длину подстроки, если Мне нужно проверить последовательности длиной больше 3.
Вариант 2. Создайте вспомогательный набор переменных, чтобы идентифицировать начальные позиции последовательного набора (наборов) из 1s некоторой фиксированной предопределенной длины. Основываясь на более раннем примере, чтобы подсчитать последовательности длины 2, я пытаюсь получить вспомогательный набор переменных, который будет равен 1, если последовательность начинается с данного перемещения, а в противном случае - ноль:
+-------+-------+-------+-------+-------+-------+-------+-------+
| 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
}
кто-нибудь знает способ решения этой задачи?
Уважаемый Ник, большое вам спасибо, это прекрасно работает, если мы рассмотрим всю последовательность! Однако, если я попытаюсь разбить последовательность на 2 части, она не будет работать для длинных прогонов в 1 с, начиная с конца первой половины. Например, 0001111100 будет сообщать count2_1 = 1 и count3_2 = 1, в то время как оно должно быть count4_1 = 1 ... Это моя вина, что я не указал это в своем вопросе изначально.Вот почему моя идея заключалась в том, что для каждой последовательности идентифицируйте начальные позиции последовательных прогонов и подсчитайте те, которые попадают в 1 и 2 половинки. И я спотыкаюсь о том, чтобы идентифицировать эти стартовые позиции. – user2700264
Чем сложнее вопрос, тем больше вам нужно учитывать мои стратегические рекомендации по реструктуризации данных панели. Тогда отслеживание начальных позиций, а также длительности заклинаний тривиально. См. Снова http://stackoverflow.com/questions/18576167/stata-maximum-number-of-consecutive-occurrences-of-the-same-value-across-variab –
Вы были абсолютно правы, комбинация reshape и tsset работала в совершенстве! Еще раз спасибо, должен был последовать за вашим советом гораздо раньше. – user2700264