Как создать средство в данных панели для заданных c лет? - PullRequest
0 голосов
/ 23 апреля 2020

Мне нужна помощь по конкретной проблеме со Stata. У меня есть набор данных панели по id year с 1996 по 2018 год. Данные панели представляют собой комбинацию стран и регионов мира, ежегодные наблюдения по 7 различным культурам, посевным площадям.

Я хотел бы создать среднее около 2000, 2010 и 2018 годов, так что среднее значение (год 2000) = среднее значение (1999 + 2000 + 2001), среднее значение (год2010) = среднее значение (2009 + 2010 + 2011) и среднее значение (год2018) = среднее значение от (2016+ 2017 + 2018) для каждой культуры из моего выбора из 7 культур.

Тогда проблема становится еще более сложной, когда мне нужно объединить несколько стран для формирования субрегионов: скажем, мне нужен субрегион RUS1 = Россия + Украина. Как я могу создать другую переменную, которая отображает итоговое значение урожая1 между посевными площадями посевных культур в России + посевных площадей посевов в Украине на ежегодной основе Имеется в виду другая переменная, которая показывает эти суммы для каждого года, используя вышеуказанные средства. Я пробовал с by id year: egen area_rus1=total(area) if area=="Russia" & area=="Ukraine", но ничего не работает.

Имена областей, являющихся строками, которые я использовал encode (area), gen (area2) и автоматически Stata генерирует число. Для создания набора данных панели я использовал gen id=area2+itemcode

Данные панели выглядят следующим образом после sort year

enter image description here Обратите внимание, что период 1996-2018 гг. В приведенном выше примере показан только 1996 год.

1 Ответ

0 голосов
/ 23 апреля 2020

Это не получило большого отклика по нескольким причинам:

  1. Вы не показывали много кода.

  2. Вы не отображали данные в форме, которая особенно полезна. Изображение не может быть скопировано и вставлено легко в чью-то Stata, чтобы позволить эксперимент. На самом деле ваше изображение показывает переменные, которые не имеют отношения к делу, и переменные, которые являются различными версиями друг друга, и поэтому они намного сложнее, чем нам нужно.

  3. Вы обострили вопрос, чтобы задать самую сложную версию того, что вы хотите знать.

  4. Есть проблема, которую вы должны были объяснить лучше. area - строка, поэтому итоговые значения не могут быть вычислены вообще, а area2 - просто произвольные целые числа, поэтому итоговые значения могут быть вычислены, но не имеют смысла. «ничего не работает» не является информативным как сообщение о проблеме. Единственные итоги, которые имеют для меня смысл, это итоги value.

Вам нужно сначала упростить задачу, а затем нарастить.

Суть выглядит следующим образом:

* Example generated by -dataex-. To install: ssc install dataex
clear
input str2 country str6 item float year str1 region float value
"A" "barley" 1999 "X" 1
"B" "barley" 1999 "X" 2
"C" "barley" 1999 "Y" 3
"A" "barley" 2000 "X" 4
"B" "barley" 2000 "X" 5
"C" "barley" 2000 "Y" 6
"A" "barley" 2001 "X" 7 
"B" "barley" 2001 "X" 8
"C" "barley" 2001 "Y" 9 
end

* means by countries: similar variables for other periods 
egen mean_9901_c = mean(cond(inrange(year, 1999, 2001), value, .)), by(country item)

* aggregation to regions, but ensure that you don't double count 
egen value_region = total(value), by(region item year)
egen tag = tag(region item year)

* means by regions: similar variables for other periods 
egen mean_9901_r = mean(cond(tag == 1 & inrange(year, 1999, 2001), value_region, .)), by(region item)

list, sepby(year)

     +---------------------------------------------------------------------------------+
     | country     item   year   region   value   mean_9~c   value_~n   tag   mean_9~r |
     |---------------------------------------------------------------------------------|
  1. |       A   barley   1999        X       1          4          3     1          9 |
  2. |       B   barley   1999        X       2          5          3     0          9 |
  3. |       C   barley   1999        Y       3          6          3     1          6 |
     |---------------------------------------------------------------------------------|
  4. |       A   barley   2000        X       4          4          9     1          9 |
  5. |       B   barley   2000        X       5          5          9     0          9 |
  6. |       C   barley   2000        Y       6          6          6     1          6 |
     |---------------------------------------------------------------------------------|
  7. |       A   barley   2001        X       7          4         15     1          9 |
  8. |       B   barley   2001        X       8          5         15     0          9 |
  9. |       C   barley   2001        Y       9          6          9     1          6 |
     +---------------------------------------------------------------------------------+

В примере показан только один элемент, но код должен работать для нескольких.

В примере показаны ложные данные всего за три года, но средства для других периодов могут быть построены аналогичным образом.

Результаты повторяются для всех наблюдений, к которым они применяются. Чтобы увидеть или использовать результаты только один раз, используйте if. Например, средние значения за 1999–2001 годы показаны для каждого из этих лет (и других), но if year == 1999 будет способом увидеть результаты только один раз.

См. Также help collapse, help egen для его функции tag() и этой бумаги .

Что не так с вашим кодом

Ваши проблемы начинаются с

if area=="Russia" & area=="Ukraine"

, который выбирает наблюдения, для которых верно, что area и "Россия" и "Украина" в одном наблюдении, что невозможно. Вам нужен оператор | (или), а не оператор &, или для решения проблемы другим способом.

Префикс id также неверен. Использование by id: приводит к выполнению отдельных вычислений для различных значений id и делает невозможным сочетание идентификаторов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...