全部版块 我的主页
论坛 计量经济学与统计论坛 五区 计量经济学与统计软件 Stata专版
3479 5
2012-12-26
我拿到了一组数据
FarmerID    Crop          Area
1                wheat         10
1                cotton        10
1                lucern         5
2               cotton         5
2               lucern          2
3               wheat          10
3              ...
....

共有三种crop,要求农户对这三种crop的平均面积是多少。有些农户没有种wheat,有些没有种cotton,所以记录里直接没有这个观测项。我用 by farmerID crop: egen..=mean()求出来的平均值发现不对。对于那些没有种wheat的农户,他们 的wheat面积应该是0, 但是这个命令直接忽略了这个,只对表中存在的那些观测值不为零的观测项平均了。


二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

全部回复
2012-12-26 02:42:47
你是考虑pool所有的农户,然后求每种作物的面积均值吧?因为根据你的数据,貌似每个农户对每种作物只有unique的观察值,均值不就是该作物的面积么?
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2012-12-26 03:31:51
fgleric 发表于 2012-12-26 02:42
你是考虑pool所有的农户,然后求每种作物的面积均值吧?因为根据你的数据,貌似每个农户对每种作物只有uni ...
是的,但是如果农户不种wheat,他的wheat种植面积应该是0,但如果直接用stata的求均值命令,这个0就被忽略掉了,所以算出来的均值比真实的大。不如,三个农户种植wheat的面积分别是10,0,10,那么真实的均值应该是20/3,但stata给出来的是10.因为当种植面积为0时,数据里根本不会出现
farmerID    wheat     area  这个观测项。。。。
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2012-12-26 05:16:30
motto0005 发表于 2012-12-26 03:31
是的,但是如果农户不种wheat,他的wheat种植面积应该是0,但如果直接用stata的求均值命令,这个0就被忽略 ...
说说下面例子怎么错了


clear
input id str5 crop area
1 "wheat" 10
2 "wheat" 0
3 "wheat" 10
1 "rice" 50
2 "rice" 0
3 "rice" 10
end
list
bys crop:egen mean=mean(area)
list


. clear

. input id str5 crop area

            id       crop       area
  1.
. 1 "wheat" 10
  2.
. 2 "wheat" 0
  3.
. 3 "wheat" 10
  4. 1 "rice" 50
  5. 2 "rice" 0
  6. 3 "rice" 10
  7. end

. list

     +-------------------+
     | id    crop   area |
     |-------------------|
  1. |  1   wheat     10 |
  2. |  2   wheat      0 |
  3. |  3   wheat     10 |
  4. |  1    rice     50 |
  5. |  2    rice      0 |
     |-------------------|
  6. |  3    rice     10 |
     +-------------------+

. bys crop:egen mean=mean(area)

. list

     +------------------------------+
     | id    crop   area       mean |
     |------------------------------|
  1. |  3    rice     10         20 |
  2. |  2    rice      0         20 |
  3. |  1    rice     50         20 |
  4. |  3   wheat     10   6.666667 |
  5. |  2   wheat      0   6.666667 |
     |------------------------------|
  6. |  1   wheat     10   6.666667 |
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2012-12-26 10:09:21
楼主,你的命令错了,正确的应该是fgleric版主的这样,至于结果跟你的想法不一致,是因为楼主你要告诉软件你求均数所用的分母,你不告诉他他就按自己的规则来处理,比如你的问题就该把农户没种过的庄稼资料也补齐,area用0,这样再用版主的命令就能得出你要的结果了。
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2012-12-28 09:14:19
楼主为啥要by[是不是要bysort] FarmerID crop: ... mean()
有farmer id就足够了,因为每个农户每个crop就一条,上面的结果就是生成的结果跟area一样
三种作物的平均种植面积:
如果crop area为0的观测值没有列在数据集里,那就total(area)然后除以3,得到均值,是这意思么?
(要不麻烦再多提供些信息或是数据)
操作前:
id,crop,area
1,"cotton",10
1,"lucern",5
1,"wheat",10
2,"cotton",5
2,"lucern",2
3,"cotton",3
3,"wheat",10
4,"wheat",5
5,"lucern",3
5,"wheat",9
操作:
use crop,clear
drop sum
bysort id: egen mean=total(area/3)
操作后:
id,crop,area,mean
1,"wheat",10,8.333333
1,"cotton",10,8.333333
1,"lucern",5,8.333333
2,"cotton",5,2.333333
2,"lucern",2,2.333333
3,"wheat",10,4.333333
3,"cotton",3,4.333333
4,"wheat",5,1.666667
5,"wheat",9,4
5,"lucern",3,4
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

相关推荐
栏目导航
热门文章
推荐文章

说点什么

分享

扫码加好友,拉您进群
各岗位、行业、专业交流群