如何优雅的批量输出psmatch2结果
程序员文章站
2024-03-25 18:25:10
...
最近需要使用PSM-DID,要跑40多个psmatch2。
由于psmatch2输出结果不太方便,一个个复制粘贴比较费眼(也就复制200多下??)
黄河泉老师给出了一个解决办法,但他的代码需要个人适配。索性写了个小程序,欢迎尝试反馈。
原理:
- 使用scalar取出内存中保存的psmatch2运行结果
- 将前面取出的scalars依次输入到矩阵matrix内
- 将matrix用logout命令导出到excel
相信能用上这个程序一定是要跑大量循环的,一般不会是小白了,就不详细注释程序了…(手动狗头)
老规矩,先上效果图
代码
- 数据导入
clear all
use "data.dta"
set seed 10101
gen ranorder=runiform()
sort ranorder
- 定义全局变量
global PS "x1 x2 x3 x4 x5" //定义匹配变量
global Y "dif_y1 dif_y2 dif_y3" //定义多个结果变量
global Y_out "dif_y1, dif_y2, dif_y3" //定义想要输出到表格的结果变量,注意中间要加上逗号
- 自定义函数attout
cap program drop attout
program define attout
version 1.0 //2020.03.04
args var name //输入两个参数分别为var和name,比如结果输出为var,该列标题为name
sca `var'_1 = r(att)
sca `var'_2 = r(seatt)
count if (_treat==1)&(_support==1)
sca `var'_3 = r(N)
count if (_treat==0)&(_support==1)
sca `var'_4 = r(N)
count if _support==1
sca `var'_5 = r(N)
sca `var'_6 = `var'_1/`var'_2 //计算t值
mat `var' = (`var'_1 \ `var'_2 \ `var'_3 \ `var'_4 \ `var'_5 \ `var'_6)
mat colnames `var' = `name'
mat rownames `var' = ATT SE Treated Untreated N T-stat
end
- psmatch2循环
foreach v of varlist $Y{
psmatch2 treat $PS, kernel com quiet outcome(`v')
attout `v' `v'
}
- 结果输出
logout, save(myfile) dec(3) excel replace: matlist [$Y_out] ,nohalf
一些说明
- 环境:Win10.0.18363.592; Stata 16(低版本亦能运行)
- 改善:暂时未解决自动加显著性星星(matrix不能输入文本),不过提供了t值,可以自己后期手动加
- 联系:公众号(dm2fyq)后台留言即可。
上一篇: 华科2018年笔试题大概
推荐阅读
-
如何优雅的批量输出psmatch2结果
-
php遍历数组$arr,请教下面这个$arr数组的结构是什么样的,如何输出遍历输出结果: 1 2 3
-
php遍历数组$arr,请教下面这个$arr数组的结构是什么样的,如何输出遍历输出结果: 1 2 3
-
python中如何设置jupyter notebook的显示,完全显示输出结果的行或者列?
-
edius如何批量输出?edius批量输出的详细教程
-
edius如何批量输出?edius批量输出的详细教程
-
sqlplus 如何显示输出到控制台的结果
-
这段PHP代码如何写成能输出的结果和JS一样
-
如何对采购标准报表的输出结果执行相关增强(一)
-
mysql如何把在屏幕上输出的结果输出到一个文件上?_MySQL