前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Stata | 识别企业样本期行业是否发生变化

Stata | 识别企业样本期行业是否发生变化

作者头像
PyStaData
发布2021-10-08 15:33:02
4.5K1
发布2021-10-08 15:33:02
举报
文章被收录于专栏:PyStaDataPyStaData

提出问题

在一份非平衡面板数据中,生成虚拟变量changed,表示企业(code)在样本期间行业类型(indcd)是否发生变化。若发生变化取值为 1 ,否则为 0 。如下图所示,

changed_{code=5} = 1

,而

changed_{code=6} = 0

分析问题

想了想,一共有三种处理方法:

  • 方法一:简单粗暴但麻烦。保留企业和行业分类,去重,提取某个企业某一年的行业分类,再和原数据集匹配;此时,行业发生变化的_merge == 1,再在组内计算有多少个不为 1 的,再分组生成虚拟变量。
  • 方法二:巧妙、实用。利用code indcdcode分别分组生成 _N 进行比对,两个值对不上说明有变化,生成虚拟变量。
  • 方法三:奇技淫巧。利用外部命令 egenmorenvals() 函数,可以用于计算组内非重复值的数量。

此外,关于 Stata 如何处理非重复值可以阅读 Cox N J, Longton G M. Speaking Stata: Distinct Observations[J]. The Stata Journal, 2008, 8(4): 557–568. [1]

实现代码

use "try.dta", clear

* 法一:数据集匹配
preserve
sort code year
keep code indcd
duplicates drop code,force
save "try_indcd_temp.dta", replace
restore
merge m:1 code indcd using "try_indcd_temp.dta"
gen diff = 1 if _merge != 3
egen total_diff = count(diff), by(code)
gen changed_1 = (total_diff != 0)
drop _merge diff total_diff
count if changed_1 == 1

* 法二:利用 _N
bysort code indcd:gen numa=_N
bysort code :gen numb=_N
gen changed_2 = (numa!=numb)
count if changed_2 == 1
drop numa numb

* 法三:nvals() 函数
egen group_dup = nvals(indcd), by(code)
gen changed_3 = (group_dup != 1)
drop group_dup
count if changed_3 == 1

sum  changed*

最终的得到的三个变量描述性统计如下:

参考资料

[1]

Cox N J, Longton G M. Speaking Stata: Distinct Observations[J]. The Stata Journal, 2008, 8(4): 557–568. : https://journals.sagepub.com/doi/pdf/10.1177/1536867X0800800408

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2021-09-23,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 PyStaData 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 提出问题
  • 分析问题
  • 实现代码
    • 参考资料
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档