Stata编程小笔记4——分组求和
deepwaterqh
编辑于 2022年05月11日 18:43
收录于文集
共8篇

绪言:

(1)分组求和最常用的命令是 bys 和 egen / gen 结合,其中bys是bysort的缩写,能实现“排序+分组”的双重功能。如果单纯写by,stata会要求你先对数据排序——sort。注意bys 和 egen 、 gen 结合效果不同。

(2)分组求和还有一个常用命令,叫collapse,但注意这个命令会改变原始数据的结构。


首先是bys和egen:将组内某变量的所有值一次性相加(缺失值视为0)。

代码块
JavaScript
自动换行
复制代码
sysuse auto,clear
bys foreign:egen TotalPrice = sum(price)
list price foreign TotalPrice in 1/5
复制成功

上述例子是按照foreign这个变量来分组,然后加总每组内price变量的值,并将加总的值保存在TotalPrice变量中。对于bys这行命令,有时候我们会看到下面这种写法:

代码块
JavaScript
自动换行
复制代码
bys foreign (make):egen TotalPrice = sum(price)
复制成功

bys后面的变量多了个括号,这是什么意思呢?实际上,这相当于如下命令:

代码块
JavaScript
自动换行
复制代码
sort foreign make
by foreign: egen TotalPrice = sum(price)
复制成功

换言之,make这个变量在分组求和过程中不起作用,而仅在dataset展示数据的时候起作用(分组列示)。


其次是bys和gen:将组内某变量的值逐步累加(缺失值视为0)。

代码块
JavaScript
自动换行
复制代码
* 输入数据
clear
input a b
1 1
1 2
1 3
0 3
0 .
0 4
end
* 逐步累加
bys a: gen c = sum(b)
* 展示结果
list,sep(10)
复制成功


最后是collapse:这个命令和前面两个命令的最大区别在于,运行之后原始数据不见了,取而代之的是求和的结果。比如:

代码块
JavaScript
自动换行
复制代码
clear
input year a
2012 1
2012 2
2012 3
2012 .
2013 5
2013 9
end
collapse (sum) asum=a, by(year)  //按年份分组
复制成功

结果数据:

collapse命令结果展示