Кумулятивный подсчет переменной в Stata - PullRequest
0 голосов
/ 06 марта 2020

Я чувствую, что это очень просто. У меня есть переменная, которая выглядит следующим образом [0, 1, 2, 3, 0, 1, 2, 0, 1], начиная с 0, тикает вверх и затем сбрасывается. Я должен быть в состоянии отследить, с каким сбросом номера происходит каждое наблюдение. Поэтому для этого набора данных ожидаемые значения: [1, 1, 1, 1, 2, 2, 2, 3, 3]. Я не могу понять это.

Я сейчас использую Stata, но я переключаюсь на R, если это проще. У меня есть около полумиллиона наблюдений, так что то, что не займет много времени, будет оценено.

Ответы [ 3 ]

1 голос
/ 06 марта 2020

Stata решение:

clear

input foo
0
1
2
3
0
1
2
0
1
end

generate wanted = sum(foo == 0)

list, separator(0)

     +--------------+
     | foo   wanted |
     |--------------|
  1. |   0        1 |
  2. |   1        1 |
  3. |   2        1 |
  4. |   3        1 |
  5. |   0        2 |
  6. |   1        2 |
  7. |   2        2 |
  8. |   0        3 |
  9. |   1        3 |
     +--------------+
1 голос
/ 06 марта 2020

Вот еще одно базовое решение R с использованием findInterval, т. Е.

findInterval(seq_along(x),which(x==0))
# [1] 1 1 1 1 2 2 2 3 3
1 голос
/ 06 марта 2020

В R это очень просто, используя cumsum. Это в основном увеличивает счетчик всякий раз, когда в последовательности встречается 0.

x <- c(0, 1, 2, 3, 0, 1, 2, 0, 1)
cumsum(x == 0)
#[1] 1 1 1 1 2 2 2 3 3
...