温馨提示: 定期 清理浏览器缓存,可以获得最佳浏览体验。
作者: 刘欣妍 (香港中文大学)
邮箱: liuxinyan@link.cuhk.edu.hk
目录
本文主要通过一些案例演示,来解决大家在 Stata 应用中遇到的各种求和问题。
具体代码如下:
clear
input x1 x2
1 2
2 4
3 6
4 8
end
gen sum_x1 = sum(x1)
gen sum_x2 = sum(x2)
list, clean noobs
具体结果如下:
x1 x2 sum_x1 sum_x2
1 2 1 2
2 4 3 6
3 6 6 12
4 8 10 20
从结果中可以看出,gen
提供的 sum()
函数是累计求和。
具体代码如下:
clear
input x1 x2
1 2
2 4
3 6
4 8
end
egen sum_x1=sum(x1)
egen sum_x2=sum(x2)
egen rsum_x = rsum(x1 x2)
egen rtotal_x = rowtotal(x1 x2)
list , clean noobs
具体结果如下:
x1 x2 sum_x1 sum_x2 rsum_x rtotal_x
1 2 10 20 3 3
2 4 10 20 6 6
3 6 10 20 9 9
4 8 10 20 12 12
从结果中可以看出,egen
提供的 sum()
函数计算该变量的总和,rsum()
计算行数值的相加和,rowtotal()
函数与 rsum()
功能一致。需要注意的是,rowtotal()
不能简写为 rtotal()
。
此外,egen
还提供了丰富的针对行操作的函数,如 rowfirst()
、rowlast()
、rowmax()
、rowmean()
、rowmedian()
、rowmin()
、rowmiss()
、rownonmiss()
、rowpctile()
、rowsd()
等,详细介绍可以通过 help egen
查看。
collapse()
适用于将月度、季度、或半年度的数据加总至年度数据,但是其没有将新生成的数据默认设为面板数据,当你进行分析时,需要再次进行 tsset
。tscollap()
命令也可以实现上述功能 (注意,在使用tscollap
命令之前,需要将数据定义为面板数据),但其新生成的数据无需再 tsset
。
collapse
实现代码:
*数据下载地址
*https://gitee.com/arlionn/data/blob/master/data01/lutkepohl2.dta
use lutkepohl2.dta, clear
gen year = year(dofq(qtr)) // 从qtr这个数据中提取出年份
list qtr inv inc consump in 1/4, clean noobs
collapse(sum) inv inc consump, by(year) //按照年份加总inv,inc,和comsump三个变量
list year inv inc consump in 1/4, clean noobs
具体结果如下:
. list qtr inv inc consump in 1/4, clean noobs
qtr inv inc consump
1960q1 180 451 415
1960q2 179 465 421
1960q3 185 485 434
1960q4 192 493 448
. list year inv inc consump in 1/4, clean noobs
year inv inc consump
1960 736 1894 1718
1961 834 2090 1883
1962 931 2263 2048
1963 978 2427 2168
tscollap
实现代码:
use lutkepohl2.dta, clear
tscollap (sum) inv inc consump, to(y) //to()可以放入q、h、y,分别代表季度、半年度、年度
list y_y inv inc consump in 1/4, clean noobs
当然,我们也可以通过 egen
命令实现上述过程,具体代码如下:
use lutkepohl2.dta, clear
gen year = year(dofq(qtr))
sort year
by year: egen inv_sum = sum(inv)
by year: egen inc_sum = sum(inc)
by year: egen consump_sum = sum(consump)
by year: keep if _n == _N
list year inv_sum inc_sum consump_sum in 1/4, clean noobs
rolling
可以对特定窗口实现滚动操作,我们这里仅将其运用滚动求和,更多功能详见 help rolling
。
具体代码如下:
use lutkepohl2, clear
rolling inc_sum =(r(mean)*r(N)), window(4): summarize inc, detail //窗口为4,通过均值和样本数相乘求和
list in 1/4, clean noobs
具体结果如下:
start end inc_sum
1960q1 1960q4 1894
1960q2 1961q1 1952
1960q3 1961q2 2007
1960q4 1961q3 2043
连享会-直播课 上线了!
http://lianxh.duanshu.com
免费公开课:
直击面板数据模型 - 连玉君,时长:1小时40分钟 Stata 33 讲 - 连玉君, 每讲 15 分钟. 部分直播课 课程资料下载 (PPT,dofiles等)
支持回看,所有课程可以随时购买观看。
专题 | 嘉宾 | 直播/回看视频 |
---|---|---|
⭐ 最新专题 ⭐ | DSGE, 因果推断, 空间计量等 | |
⭕ Stata数据清洗 | 游万海 | 直播, 2 小时,已上线 |
研究设计 | 连玉君 | 我的特斯拉-实证研究设计,-幻灯片- |
面板模型 | 连玉君 | 动态面板模型,-幻灯片- |
面板模型 | 连玉君 | 直击面板数据模型 [免费公开课,2小时] |
Note: 部分课程的资料,PPT 等可以前往 连享会-直播课 主页查看,下载。
关于我们
课程, 直播, 视频, 客服, 模型设定, 研究设计, stata, plus, 绘图, 编程, 面板, 论文重现, 可视化, RDD, DID, PSM, 合成控制法
等
连享会小程序:扫一扫,看推文,看视频……
扫码加入连享会微信群,提问交流更方便
✏ 连享会学习群-常见问题解答汇总:
✨ https://gitee.com/arlionn/WD