Stata:如何计算每年每个行业内,小于该企业对应值的所有企业的均值

今天有个小伙伴问了这样一个问题:

如何计算每年每个行业内,小于该企业对应值的所有企业的均值?

这个问题可以这样解决,我准备了一个示例数据:

use data, clear
list in 1/10, sep(0)

*> +---------------------------------------------------------+
*> | 年份 企业名称 行业~称 工业~元 |
*> |---------------------------------------------------------|
*> 1. | 1998 上海天厨氨基酸厂 制造业 1790 |
*> 2. | 1998 下蜀房地产开发公司预制厂 制造业 6214 |
*> 3. | 1998 北流市国马水泥厂 制造业 6954 |
*> 4. | 1998 四川省什邡建川实业总公司 制造业 27575 |
*> 5. | 1998 环城环玉粘合剂厂 制造业 20160 |
*> 6. | 1998 邗江县头桥金属家具厂 制造业 10080 |
*> 7. | 1998 北京市怀柔县崎峰茶黄金采选厂 采掘业 11176 |
*> 8. | 1999 地方国营宁波针织衫厂 制造业 145982 |
*> 9. | 1999 永泰县食品厂 制造业 261 |
*> 10. | 1999 津宝梅丝饮品有限公司 制造业 5630 |
*> +---------------------------------------------------------+

假如这里我们想计算每年每个行业内,小于每个企业的工业总产值_当年价格千元值的企业均值。由于 工业总产值_当年价格千元 变量可能有相同的(这个示例数据中没有),所以我们先去除重复的:

use data, clear

*- 去除重复值
keep 年份 行业门类名称 工业总产值_当年价格千元
duplicates drop 年份 行业门类名称 工业总产值_当年价格千元, force

然后我们把数据按照 年份, 行业门类名称, 工业总产值_当年价格千元 排序:

gsort 年份 行业门类名称 工业总产值_当年价格千元

这样,工业总产值 变量就是从小到大的顺序排列了,然后计算累加:

bysort 年份 行业门类名称: gen cumsum = sum(工业总产值_当年价格千元)

因为已经按照从小到大的顺序排列了,并且去除了重复值,所以累加值减去自身就是比自己小的值的总和了:

bysort 年份 行业门类名称: gen sum = cumsum - 工业总产值_当年价格千元

然后除以对应的数量就是要求的均值了:

bysort 年份 行业门类名称: gen n = _n - 1
gen smallmean = sum / n
drop cumsum sum n
save 计算结果, replace

最后再和原始数据匹配即可:

*- 和原始数据匹配
use data, clear
merge m:1 年份 行业门类名称 工业总产值_当年价格千元 using 计算结果

*> Result Number of obs
*> -----------------------------------------
*> Not matched 0
*> Matched 110 (_merge==3)
*> -----------------------------------------

drop _m
save 结果数据, replace

list in 1/10, sep(0)
*> +--------------------------------------------------------------------+
*> | 年份 企业名称 行业~称 工业~元 smallm~n |
*> |--------------------------------------------------------------------|
*> 1. | 1998 上海天厨氨基酸厂 制造业 1790 . |
*> 2. | 1998 下蜀房地产开发公司预制厂 制造业 6214 1790 |
*> 3. | 1998 北流市国马水泥厂 制造业 6954 4002 |
*> 4. | 1998 邗江县头桥金属家具厂 制造业 10080 4986 |
*> 5. | 1998 环城环玉粘合剂厂 制造业 20160 6259.5 |
*> 6. | 1998 四川省什邡建川实业总公司 制造业 27575 9039.6 |
*> 7. | 1998 北京市怀柔县崎峰茶黄金采选厂 采掘业 11176 . |
*> 8. | 1999 永泰县食品厂 制造业 261 . |
*> 9. | 1999 津宝梅丝饮品有限公司 制造业 5630 261 |
*> 10. | 1999 锡山市锦安洗衣机配件有限公司 制造业 46700 2945.5 |
*> +--------------------------------------------------------------------+

点击这里跳转到 RStata 短书平台获取附件:Stata:如何计算每年每个行业内,小于该企业对应值的所有企业的均值

评论