Я работаю с набором данных панели со следующими переменными. Вот фрагмент моих данных:
i region urban year
8431 3 1 1979
8431 3 1 1980
8431 3 1 1981
8431 3 1 1982
8431 3 0 1983
8431 3 0 1984
8431 3 0 1985
8431 3 0 1986
8431 3 0 1987
8431 3 0 1988
8431 3 0 1989
8431 3 1 1990
8431 3 1 1991
8431 3 1 1992
8431 3 1 1993
8431 3 1 1994
8431 3 1 1996
8431 3 0 1998
8431 3 1 2000
8431 3 1 2002
8431 3 1 2004
8431 3 1 2006
8431 2 0 2008
8431 3 1 2010
8431 3 1 2012
Панель сильно сбалансирована, но есть некоторые недостающие наблюдения в данных, которые я обрабатываю с помощью интерполяции.
Я хочу подсчитать общее количество раз region
и urban
изменения в течение периода наблюдения для каждого человека.
Первое, что я попробовал, это запаздывающие значения:
bysort i: gen urban_lag = l1.urban
bysort i (year): gen urbanchange = 0 if urban==urban_lag & !missing(urban)
replace urbanchange = 1 if urban!=urban_lag & !missing(urban)
По какой-то причине это генерирует много пропущенных значений, даже для тех, у кого нет пропущенных значений для region
. Кто-нибудь знает, почему это так?
Затем я попробовал это:
sort i year
by i: gen byte urbanchange = urban != urban[_n-1]
Это в основном работает и приближает меня к тому месту, где я хочу, за исключением того, что первое наблюдение каждого человека равно 1, потому что change[0]
находится перед началом данных, и поэтому Stata возвращает его как отсутствующее, поэтому я получаю urbanchange[1] = 1
для каждого человека.
Вот результат, который я хочу:
i region urban year regionchange urbanchange
8431 3 1 1979 0 0
8431 3 1 1980 0 0
8431 3 1 1981 0 0
8431 3 1 1982 0 0
8431 3 0 1983 0 1
8431 3 0 1984 0 0
8431 3 0 1985 0 0
8431 3 0 1986 0 0
8431 3 0 1987 0 0
8431 3 0 1988 0 0
8431 3 0 1989 0 0
8431 3 1 1990 0 1
8431 3 1 1991 0 0
8431 3 1 1992 0 0
8431 3 1 1993 0 0
8431 3 1 1994 0 0
8431 3 1 1996 0 0
8431 3 0 1998 0 1
8431 3 1 2000 0 1
8431 3 1 2002 0 0
8431 3 1 2004 0 0
8431 3 1 2006 0 0
8431 2 0 2008 1 1
8431 3 1 2010 1 1
8431 3 1 2012 0 0
Этот вопрос в основном является версией Stata этого вопроса, который я задал год назад Подсчет количества изменений категориальной переменной во время повторных измерений в категории
Изменить в отношении интерполяции: поскольку в моих данных много пробелов, для наблюдений с пропущенными значениями я предполагаю, что, например, текущая городская ценность человека такая же, как и последнее наблюдаемое ( неотъемлемая часть) городского значения.
Например:
region urban year
1 1 1979
1 1 1980
1 1 1981
3 1 1982
3 1 1983
3 1 1984
. . 1985
1 1 1986
1 1 1987
1 1 1988
1 1 1989
. . 1990
. . 1991
. . 1992
. . 1993
. . 1994
Я заполняю недостающие значения следующим образом:
gen urban1 = urban
bysort i (year): replace urban1 = urban1[_n-1] if missing(urban1)
gsort i -year
replace urban1 = urban1[_n-1] if urban1 >=.
и сделайте то же самое для региона.
Выход:
region urban year region1 urban1
1 1 1979 1 1
1 1 1980 1 1
1 1 1981 1 1
3 1 1982 3 1
3 1 1983 3 1
3 1 1984 3 1
. . 1985 3 1
1 1 1986 1 1
1 1 1987 1 1
1 1 1988 1 1
1 1 1989 1 1
. . 1990 1 1
. . 1991 1 1
. . 1992 1 1
. . 1993 1 1
. . 1994 1 1
Я делаю здесь несколько сильных предположений, и некоторые могут не согласиться с тем, что я здесь делаю, но с целью подсчета количества изменений это не влияет на результаты, которые я хочу, а отсутствующие значения не влияют на мои выход.