如何在面板数据中创建特定年份的均值?

我需要在Stata的一个特殊问题上得到帮助。我有一个面板数据集,由 id year 从1996年到2018年.面板数据是世界各国和地区的组合,每年的观测数据,7种不同作物的种植面积。

我想在2000年、2010年和2018年前后建立一个均值,这样,对于我选择的7种作物中的每一种作物,均值(year2000)=(1999+2000+2001)的均值,均值(year2010)=(2009+2010+2011)的均值,均值(year2018)=(2016+2017+2018)的均值。

那么当我需要将一些国家合并成子区域时,问题就更复杂了:比如我需要子区域RUS1=俄罗斯+乌克兰。我怎样才能创建另一个变量,显示俄罗斯的作物1种植面积+乌克兰的作物1种植面积之间每年的总和。意思是另一个变量,显示这些总和每年使用上述手段.我已经尝试与 by id year: egen area_rus1=total(area) if area=="Russia" & area=="Ukraine"但是什么都没有用。

区域名称是字符串,我用了 encode (area), gen (area2) 为了创建一个面板数据集,我使用了以下方法 gen id=area2+itemcode

面板数据是这样的,经过 sort year

enter image description here请注意,这段时间是1996-2018年。上面的例子只显示了1996年。

解决方案:

这个没有得到太多的回应,有几个原因。

  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 并要使标识符的组合变得不可能。

给TA打赏
共{{data.count}}人
人已打赏
解决方案

当我试图更新它时,PIP说它是最新的,但随后它就不是了。

2022-5-11 15:00:36

解决方案

GET http:/0.0.0.0:8080index.html?age=8&rel= 404 (Object Not Found)

2022-5-11 15:00:38

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索