1. 问题背景
我们经常使用 generate (后文简称 gen) 命令提供的 group() 函数对某个变量进行分组,产生分组变量 gg,继而基于 gg 变量进行后续的分组回归分析。
例如,在公司金融中,常用如下代码产生融资约束的分组指标:
*-用公司规模衡量融资约束,分成三组
. bysort code: egen av_size = mean(size)
. sort av_size
. gen gg = group(3)
. gen FC = (gg==1) //小规模公司定义为 FC 组
. replace FC=. if gg==2 //丢弃中间组
. reg y x if FC==0
. est store m_FC
. reg y x if FC==1
. est store m_NFC
. esttab m_FC m_NFC
恐怖的事情就要发生了!
后续做分组回归时,你会发现:执行相同的代码,但两次得到的结果居然不同!
原因何在??
一个小例子
我先虚构一份数据,让各位了解 group() 函数的工作原理,搞明白这件事情后,上面的问题就迎刃而解了。
这份数据很简单,只有 4 行观察值。我们对变量 x 排序后再执行 gen g = group(2) 命令,以便将样本分成两组。为了测试分组结果是否唯一\稳定,我进一步使用 tatstat 命令计算了两组的均值。
clear
input x y
3 13
2 10
1 1
2 8
end
sort x \\ 由小到大排序
gen g = group(2) \\ 等分两组
tabstat x y, by(g) f(%3.1f)
sort g x y
list, sepby(g) noobs
第一轮执行的结果如下:
. tabstat x y, by(g) f(%3.1f)
Summary statistics: mean
by categories of: g
g | x y
---------+--------------------
1 | 1.5 5.5
2 | 2.5 10.5
---------+--------------------
Total |