Stata:runby - 一切皆可分组计算!

发布时间:2020-07-21 阅读 4803

Stata 连享会   主页 || 视频 || 推文

温馨提示: 定期 清理浏览器缓存,可以获得最佳浏览体验。

课程详情 https://gitee.com/arlionn/Course   |   lianxh.cn

课程主页 https://gitee.com/arlionn/Course

作者:黄河泉 | 连玉君


目录


背景: 在 Stata 提供了一个高效实用的副指令 —— byable,可以让我快捷地计算分组统计量,如各行业的均值、标准差等。例如,by industry: egen invest_mean = mean(invest),可以快速计算出每个行业的平均投资支出。然而,并不是所有的 generateegen 命令提供的函数都支持 byable 副指令。此时,我们如何计算分组统计量呢?一个粗暴的方法就是使用 forvaluesforeach 等循环语句。其实,还有更为简洁的方法 —— 使用外部命令 runby !

1. runby 的运行原理

其本质仍然是使用 forvaluesforeach 等循环语句执行分组计算。但便利之处在于我们无需自行书写完整的循环语句,只需提供核心计算公式即可。因此,我们只需使用 program define 语句定义一个简单的小程序,然后内嵌到 runby 语句之中即可。

2. 使用过程释义

  • 目的: 对每家公司的投资支出进行标准化。公式为 std_x = [x - mean(x)]/sd(x)
  • 难点: 虽然可以使用 egen 命令提供的 std() 函数实现标准化转换,但却不支持 byable
  • 解决方法:
    • Step 1: 定义一个小程序,用于执行标准化转换:
program define one_std    
  egen invest_std = std(invest)
end

程序的调用方法: (1) 如果这个程序只是偶尔用一下,可以在 dofile 中撰写上述程序,选中后按快捷键 Ctrl+R,将该程序读入 Stata 内存,随后就可以像使用一般的 Stata 命令那样使用 one_std 命令了。(2) 如果这个程序在日后会经常使用,则可以将其单独存放在一个 dofile 中,保存为 “one_std.ado” (注意:后缀是 .ado,文件的与程序名称同名),将其保存到 D:\stata15\ado\personal\myado 文件夹下(如果没有,可以执行创建),进而执行 adopath + D:\stata15\ado\personal\myado,告知 Stata:我在这里还存放了一些可执行的自编程序!设定完后,我们自行定义的 one_std 程序就是一个能够被 Stata 识别的合法程序了。

    • Step 2: 运行 runby 命令,执行分组计算: runby 是外部命令,可以执行如下命令安装之:
ssc install runby, replace

然后,就可以愉快滴进行分组计算了:

runby one_std, by(company)

3. 完整Stata 范例

*-定义程序
capture program drop one_std
program define one_std    
  egen invest_std = std(invest)
end
*-Note:选中上述程序,按快捷键 Ctrl+R 将其读入内存

*-调入数据
. webuse "grunfeld.dta", clear
*-分组计算
. runby one_std, by(company)

*-列示结果
. list company year invest* if year<1938, sepby(company)
  +--------------------------------------+
  | company   year   invest   invest_std |
  |--------------------------------------|
  |       1   1935    317.6   -.93812598 |
  |       1   1936    391.8   -.69844231 |
  |       1   1937    410.6   -.63771376 |
  |--------------------------------------|
  |       2   1935    209.9    -1.599489 |
  |       2   1936    355.3   -.43999411 |
  |       2   1937    469.9    .47388569 |
  |--------------------------------------|
  |       3   1935     33.1   -1.4241168 |
  |       3   1936       45   -1.1791827 |
  |       3   1937     77.2    -.5164199 |
  |--------------------------------------|
  |       4   1935    40.29   -1.0727421 |
  |       4   1936    72.76   -.31277531 |
  |       4   1937    66.26   -.46490908 |
  |--------------------------------------|
  |       5   1935    39.68   -1.4586008 |
  |       5   1936    50.73   -.73004219 |
  |       5   1937    74.24    .82004045 |
  |--------------------------------------|
  |       6   1935    20.36   -1.0029697 |
  |       6   1936    25.98   -.84215578 |
  |       6   1937    25.94   -.84330034 |
  |--------------------------------------|
  |       7   1935    24.43   -1.2647902 |
  |       7   1936    23.21   -1.3313998 |
  |       7   1937    32.78   -.80889688 |
  |--------------------------------------|
  |       8   1935    12.93   -1.5678286 |
  |       8   1936     25.9   -.88913306 |
  |       8   1937    35.05    -.4103309 |
  |--------------------------------------|
  |       9   1935    26.63   -1.0253897 |
  |       9   1936    23.39   -1.2431145 |
  |       9   1937    30.65   -.75524966 |
  |--------------------------------------|
  |      10   1935     2.54   -.31681649 |
  |      10   1936        2   -.63101462 |
  |      10   1937     2.19   -.52046338 |
  +--------------------------------------+

验证程序

webuse grunfeld, clear

// default/manual
bys company: egen invest_mean0 = mean(invest)
bys company: egen invest_sd0 = sd(invest) 
gen invest_std0 = (invest-invest_mean0)/invest_sd0

// runby 
capture program drop one_std
program define one_std   
  egen invest_mean1 = mean(invest)   
  egen invest_sd1 = sd(invest)  
  gen invest_std1 = (invest-invest_mean1)/invest_sd1
  egen invest_std2 = std(invest)
  exit
end
runby one_std, by(company)

相关课程

连享会-直播课 上线了!
http://lianxh.duanshu.com

免费公开课:


课程一览

支持回看,所有课程可以随时购买观看。

专题 嘉宾 直播/回看视频
最新专题 DSGE, 因果推断, 空间计量等
Stata数据清洗 游万海 直播, 2 小时,已上线
研究设计 连玉君 我的特斯拉-实证研究设计-幻灯片-
面板模型 连玉君 动态面板模型-幻灯片-
面板模型 连玉君 直击面板数据模型 [免费公开课,2小时]

Note: 部分课程的资料,PPT 等可以前往 连享会-直播课 主页查看,下载。


关于我们

  • Stata连享会 由中山大学连玉君老师团队创办,定期分享实证分析经验。直播间 有很多视频课程,可以随时观看。
  • 连享会-主页知乎专栏,300+ 推文,实证分析不再抓狂。
  • 公众号推文分类: 计量专题 | 分类推文 | 资源工具。推文分成 内生性 | 空间计量 | 时序面板 | 结果输出 | 交乘调节 五类,主流方法介绍一目了然:DID, RDD, IV, GMM, FE, Probit 等。
  • 公众号关键词搜索/回复 功能已经上线。大家可以在公众号左下角点击键盘图标,输入简要关键词,以便快速呈现历史推文,获取工具软件和数据下载。常见关键词:课程, 直播, 视频, 客服, 模型设定, 研究设计, stata, plus, 绘图, 编程, 面板, 论文重现, 可视化, RDD, DID, PSM, 合成控制法

连享会主页  lianxh.cn
连享会主页 lianxh.cn

连享会小程序:扫一扫,看推文,看视频……

扫码加入连享会微信群,提问交流更方便

✏ 连享会学习群-常见问题解答汇总:
https://gitee.com/arlionn/WD