Это не получило большого отклика по нескольким причинам:
Вы не показывали много кода.
Вы не отображали данные в форме, которая особенно полезна. Изображение не может быть скопировано и вставлено легко в чью-то Stata, чтобы позволить эксперимент. На самом деле ваше изображение показывает переменные, которые не имеют отношения к делу, и переменные, которые являются различными версиями друг друга, и поэтому они намного сложнее, чем нам нужно.
Вы обострили вопрос, чтобы задать самую сложную версию того, что вы хотите знать.
Есть проблема, которую вы должны были объяснить лучше. 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
и делает невозможным сочетание идентификаторов.