Stata中按年份和州计算受处理企业占比的实现方法
Stata具体实现方案
以下代码默认数据集为企业-年份维度面板,核心变量定义为firm_id(企业唯一识别ID)、year(统计年份)、state(企业所属州)、treated(当年是否受处理标识,1=受处理,0=未受处理),你可根据实际变量名替换对应位置即可。
方案1:适用于Stata 14.2及以上版本(使用egen内置唯一值计数函数)
* 第一步:清除同一企业同一年份的重复观测,保证单条企业-年份观测唯一 duplicates drop firm_id year, force * 第二步:按州、年份分组,统计组内全部唯一企业总数作为分母 bys state year: egen total_firm = nvals(firm_id) * 第三步:按州、年份分组,统计组内受处理的唯一企业总数作为分子 bys state year: egen treated_firm = nvals(firm_id) if treated == 1 * 同组内所有观测填充统一的受处理企业数,空值补0 bys state year: replace treated_firm = treated_firm[_N] replace treated_firm = 0 if missing(treated_firm) * 第四步:计算受处理企业占比 gen treated_ratio = treated_firm / total_firm
方案2:适用于Stata 14.2以下低版本(无内置唯一值计数函数时使用)
* 第一步:清除同一企业同一年份的重复观测 duplicates drop firm_id year, force * 第二步:标记每组内唯一企业,统计各州每年总企业数作为分母 bys state year firm_id: gen firm_tag = _n == 1 bys state year: egen total_firm = total(firm_tag) * 第三步:标记每组内受处理的唯一企业,统计各州每年受处理企业数作为分子 bys state year firm_id: gen treated_tag = _n == 1 & treated == 1 bys state year: egen treated_firm = total(treated_tag) * 第四步:计算受处理企业占比 gen treated_ratio = treated_firm / total_firm
注意事项:
- 如果你的原始数据集维度小于企业-年份(比如包含同企业同年份的月度/季度经营数据),需要先执行
keep firm_id year state treated+duplicates drop firm_id year, force聚合到企业-年份维度后再计算,避免重复计数。- 生成的
treated_ratio在同一州同一年份的所有企业观测下取值一致,若仅需要州-年份维度的汇总结果,可执行collapse (first) total_firm treated_firm treated_ratio, by(state year)得到汇总表。
内容的提问来源于stack exchange,提问作者user173192
相关产品推荐
相关产品推荐

