STATA Tidbits 将讨论STATA使用中的一些小技巧。
智库工作中常常需要分析某一类型的政策变动带来的影响。这一工作的前提就是从数据中找出政策改变的年份。下图为中国各省高考录取制度的数据库,其中的e变量代表了高考志愿填报中每个考生可以填报的平行志愿的数量。在2003年之前,各省只允许每个考生填写一个志愿,而从2003年开始,各省纷纷开始对这一政策进行改革,逐渐增加了平行志愿的数量。如果我们想要知道各省都是在哪些年份进行的改革,以及进行过几次改革,该如何在Stata里面实现呢?本文将提供一个使用STATA的 _n operator的解决方案。
_n
和 _N
是STATA系统自带的变量, _n
代表的是目前这个观测值的排位,而N代表的是数据中的观测值的总数。我们经常使用n来找出靠近的观察值,例如 gen gdp_lag=gdp[_n-1]
可以得到前一个观察值的GDP。
而我们可以把 bysort
和 _n
结合在一起使用,来达到识别政策变动的目的。我们只需要规定,在每个省内,按照年份排序后,当前观察值和前一个观察值的平行志愿数量不同时,我们即认为改革在该年份开始。
bysort provid (wave):
gen matching_policy_change = (e[_n] != e[_n-1])
通过上述代码,我们发现,总计有54次改革发生。然而,这样的计算结果是错误的。原因在于,STATA对于缺失值的处理。当我们在检查每个省份内的第一个变量时,即 _n==1
时,前一个观察值并不存在,因此STATA认为 e[0]=.
,因此 e[1]!=e[0]
,从而错误地将每一个省份的第一个观察值认为是改革开始的年份。我们只需要简单地修改上述代码即可得到正确的结果:
bysort provid (wave):gen matching_policy_change =
(e[_n] != e[_n-1]) & e[_n-1]!=.
正确的改革次数因为24次。然而,这并不意味着有24个省份进行了改革,有些省份可能进行了多次改革,而我们的程序允许这种情况的出现。
Reference:
Cox, N. J. (2007). Speaking stata: Identifying spells. Stata Journal, 7(2), 249-265.