#stata
Вопрос:
У меня есть данные панели на уровне города за год, которые выглядят так:
city year mayor growth
Orange 2001 A 9.599998
Orange 2002 A 14.9
Orange 2003 A 14.6
Orange 2004 A 13
Orange 2005 B 9
Orange 2006 B 12.7
Orange 2007 C 18.4
Orange 2008 D 20.7
Orange 2009 D 16.5
Я хочу рассчитать для каждого мэра в каждом городе:
(1) рост в его первый год на посту мэра
(2) скользящий средний рост с его первого года
Мой код таков:
bysort city mayor (year) : gen rollavg = sum(growth) / sum(growth < .) if mayor != "" amp; growth != .
bysort city mayor (year) : gen year1growth = growth[1]
Это работает для большинства данных, но для некоторых городов/мэров Стата возвращает случайные числа:
city year mayor growth year1growth rollavg
Orange 2001 A 9.599998 10345.59 10345.59
Orange 2002 A 14.9 10345.59 5180.245
Orange 2003 A 14.6 10345.59 3458.363
Orange 2004 A 13 10345.59 .
Orange 2005 B 9 9 9
Orange 2006 B 12.7 9 10.85
Orange 2007 C 18.4 18.4 18.4
Orange 2008 D 20.7 20.7 20.7
Orange 2009 D 16.5 20.7 18.6
Orange 2010 D 12.5 20.7 16.56667
Например, это работает для мэра D: рост за 1 год = 20,7, что соответствует темпам роста в его первый 2008 год. Скользящее среднее также работает, 18.6 = (20.7 16.5)/2 и 16.56 = (20.7 16.5 12.5)/3.
Однако цифры совершенно неверны для мэра А.
Кто-нибудь знает, как это исправить?
Комментарии:
1. См
stata
. вики-теги для получения рекомендаций по приведению примеров данных. В частности, нам нужно знать, видим ли мы метки значений для какой-либо из этих переменных.
Ответ №1:
Я не могу воспроизвести это. Я отмечаю, что ваш пример противоречив, так как имена переменных для вашего примера данных и для ваших результатов не идентичны. (Исправлено в правке исходного вопроса: мой пример данных и результаты совпадают по названиям, но отличаются.)
Мои единственные догадки заключаются в том, что
- Существует некоторая путаница в том, что находится в какой переменной в вашем реальном наборе данных.
- Хотя вы показываете нам, что выглядит как числовые переменные, некоторые или все эти переменные, возможно, были созданы
encode
исходной строковой переменной, содержащей числа. Это известный способ производить полный мусор. Совет всегда заключается в том , чтобы использоватьdestring
, а неencode
.
if
Квалификатор не имеет отношения к данному примеру.
* Example generated by -dataex-. For more info, type help dataex
clear
input str6 City int Year str1 Mayor double Growth
"Orange" 2001 "A" 9.599998
"Orange" 2002 "A" 14.9
"Orange" 2003 "A" 14.6
"Orange" 2004 "A" 13
"Orange" 2005 "B" 9
"Orange" 2006 "B" 12.7
"Orange" 2007 "C" 18.4
"Orange" 2008 "D" 20.7
"Orange" 2009 "D" 16.5
end
bysort City Mayor (Year) : gen rollavg = sum(Growth) / sum(Growth < .)
bysort City Mayor (Year) : gen year1growth = Growth[1]
list, sepby(Mayor)
--------------------------------------------------------
| City Year Mayor Growth rollavg year1g~h |
|--------------------------------------------------------|
1. | Orange 2001 A 9.599998 9.599998 9.599998 |
2. | Orange 2002 A 14.9 12.25 9.599998 |
3. | Orange 2003 A 14.6 13.03333 9.599998 |
4. | Orange 2004 A 13 13.025 9.599998 |
|--------------------------------------------------------|
5. | Orange 2005 B 9 9 9 |
6. | Orange 2006 B 12.7 10.85 9 |
|--------------------------------------------------------|
7. | Orange 2007 C 18.4 18.4 18.4 |
|--------------------------------------------------------|
8. | Orange 2008 D 20.7 20.7 20.7 |
9. | Orange 2009 D 16.5 18.6 20.7 |
--------------------------------------------------------
Комментарии:
1. Извините за путаницу — я просто отредактировал имена переменных, чтобы они были согласованными. В реальном наборе данных мэры кодируются идентификаторами, а не именами, поскольку у некоторых людей одинаковые имена. Поэтому мы присвоили каждому человеку уникальный идентификатор, который является числовым (int). Чтобы использовать groupby, должен ли я преобразовать идентификатор в строку, если в этом проблема?
2. Является ли идентификатор строкой, здесь, скорее всего, не имеет значения. Ошибка, о которой вы сообщаете, заключается в том, что численные результаты неверны. В противном случае единственной общей валютой здесь являются примеры данных, которые мы можем запустить.
3. Большое спасибо за совет! Ошибка была исправлена… Оказывается, это была ошибка в необработанных данных…