Stata连享会 主页 || 视频 || 推文 || 知乎 || Bilibili 站
温馨提示: 定期 清理浏览器缓存,可以获得最佳浏览体验。
New!
lianxh
命令发布了:
随时搜索推文、Stata 资源。安装:
. ssc install lianxh
详情参见帮助文件 (有惊喜):
. help lianxh
连享会新命令:cnssc
,ihelp
,rdbalance
,gitee
,installpkg
⛳ Stata 系列推文:
作者:张家星 (中南财经政法大学)
邮箱:zhangjx@stu.zuel.edu.cn
编者按:本文主要摘译自下文,特此致谢!
Source:Emmanuel Milet. The Do's and Don'ts of a Do-file. -PDF-
目录
在正式开始写 do 文件之前,我们需要清楚:尘封多年的 do 文件终究会在某一天重见天日。没有任何注释的代码就像噩梦一般!未来,你甚至可能花费两天时间才理解了自己以前写的代码!为了避免这种情况,请参考如下建议:
在开始写一份新的 do 文件之前,首先需要使用 clear
、clear matrix
、clear all
等命令清除 Stata 内存中已定义的程序、矩阵以及已导入的数据。其中,
clear
单独使用时指的是清除当前内存中所有的数据和标签;clear matrix
指的是清除内存中由 matrix
命令产生的所有矩阵;clear all
指的是清除内存中的所有内容。
为 do 文件起一个明确的名字!例如:0-master.do,1-merge.do,2-stylized-facts.do 等等。当有多个特征事实时,可以设置:2.1-stylized-facts-geography.do,2.2-stylized-facts-count.do 等等,最后再将它们组织在一个 do 文件中。
主 do 文件 (master do-file) 常用于组织待执行的 do 文件,当 do 文件较多时尤为重要。
* =====================
* Master file
* =====================
* 合并 trade 数据和 gravity 数据
* 由于规模限制,每个 country*year 仅保留一个观测值
run 1_merge.do
* 变量标签
run 2_labels.do
* 特征事实
run 3_stylized_facts.do
* 回归
run 4_regression.do
注意:建议使用 run
而不是 do
命令。虽然两个命令都可以执行 do 文件,但是 run
命令在屏幕上不显示任何结果,而 do
命令会在屏幕上显示任何结果。
首先,需要在 do 文件的开头写上几行,明确指出该程序的主要目的,包括时间、项目名字、原始数据集、合并后的数据、核心变量解释、结果输出等。
其次,尽可能多的为程序添加注释,比如解释为什么要对一个变量进行缩放 (scale a variable),或是在合并数据前详细说明所使用的数据集。
* ================================================
* Date:August 2011
* Paper:Production and Geography
*
* database used:- Production.dta
* - Gravity.dta
* output:Prod_Grav.dta
* key variables:
* - Production in manufacturing sector
* - Regional distances
* - Regional price indexes
*
* ================================================
当然,也可以使用 dotemplate
命令自动生成一份 do 文件模板,详见 Stata:dofile模板DIY-速来认领吧。
当我们定义数据集与 do 文件保存目录时,一个有用的技巧便是使用全局变量。global
定义的变量会在运行期间一直起作用。要调用一个全局变量,需要在变量前使用符号 $
。
clear all
* 定义当前工作路径
global PATH "F:\Production"
cd $PATH
* 进阶版
global PATH "F:\Production" //工作路径
global D "$PATH\data" //原始数据
global R "$PATH\refs" //参考文献
global Out "$PATH\out" //结果:图形和表格
adopath + "$PATH\adofiles" //外部命令
cd "$D"
* 注意:需要提前在"F:\Production"文件夹内,
* 预先新建"data""refs""out""adofiles"等子文件夹
这样的好处是导入此路径下任何 do 文件或数据集,只需输入 use dataset1, clear
即可,而不用 use F:\Production\data\dataset1, clear
。同样,也可以直接将新生成的数据或 do 文件保存在当前工作路径。这将极大提高代码效率,也会使 do 文件结构更加清晰。
在使用新数据集时,首先要做的事情便是创建变量。有时我们需要创建很多变量。请遵循:制定自己的规则并坚持下去! 这意味着:
例如,如果你想在名字的末尾加上数字,比如 export99、export00、export01,那么就坚持规则:“变量的名字” + “两位数字”,并尝试对后续变量采用相同规则。或者,你可能更喜欢在名字和数字之间插入一个下划线:“变量的名字” + “_” + “两位数字”。但请不要混合使用两种命名规则。
关于变量标签,建议制作一个只包含标签的 do 文件。这避免了代码被过多的标签声明卡住,并且使任何修改都变得非常直接:打开 do 文件,更改标签,保存它,然后运行 do 文件。
对代码中的重要部分给出明确的标题,如 Merging,General Statistics,Labels,Regression in Cross-section 等等。
* =====================
* Merge the two dataset
* =====================
* Production dataset
use Production,clear
sort year pays
save,replace
* Gravity dataset
use Gravity,clear
sort year pays
merge yera pays using Production
tab_merge
另一种组织代码的好方法是有效使用循环语句如 foreach
。
foreach var in varl var2 var3 var4 var5 {
replace `var'=`var'/6.55957 if year==1999
gen `var'2=`var'*`var'
gen l`var'=ln(`var')
}
#delimit
命令能让我们的代码更容易阅读,它允许我们在几行上写一个命令。具体地,#delimit ;
意味着下面的命令会在 Stata 遇见符号 ;
时结束。#delimit cr
意味着再次回到 Stata 的惯常工作方式。画图时这个命令很有用。
* 散点图
sysuse uslifeexp2, clear
#delimit ;
scatter le year , msize(*0.3 ..)
title("图1 散点图示例", margin(0 0 3 0) size(*0.8))
ytitle("预期寿命")
xtitle("年份")
saving(Fig1_scatter, replace);
#delimit cr
* 注意:一定要在命令的结尾写上 “;”
回归结果表是 do 文件最重要的输出之一,建议表格中只呈现出最核心的内容,变量细节等可以放在脚注中解释。eststo
和 esttab
命令可以帮助我们按照自己的偏好快速输出结果。比如:
建议使用 esttab
命令,因为它可以在 Stata 结果窗口中生成回归表 (这样它就保存我们的日志文件中,防止电脑突然罢工时,我们丢失回归结果) ,并能够按照我们所选的格式导出相应文件。
全局变量在回归时也十分有帮助。为了避免重复这些变量,我们可以定义一个全局变量表示这些变量。
* =====================
* Regressions
* =====================
* 定义全局变量
global Gravity "gdp_d gdp_o dist_od"
* 下述两行命令的作用是一样的
eststo:xtreg x_od $Gravity ,fe i(iso_i)
eststo:xtreg x_od gdp_d gdp_o dist_od ,fe i(iso_i)
eststo:xtreg x_od $Gravity border_od ,fe i(iso_i) // 添加感兴趣的变量
* 在 LaTex 表格中展示回归结果
#delimit;
esttab, b(%5.3f) se(%5.3f) r2 se label nogaps
starlevels({$^c$} 0.1 $^b$} 0.05 $^a$} 0.01 );
* 导出 Reg1.tex 格式文件
esttab using Reg1.tex , b(%5.3f) se(%5.3f) r2 se tex label nogaps
starlevels({$^c$} 0.1 $^b$} 0.05 $^a$} 0.01 ) replace;
#delimit cr
另一种常用的回归结果输出命令是 outreg2
命令,功能基本相同,但与 estout
相比有不同的特点。
outreg2
命令;outreg2
命令的末尾使用 estout
命令;outreg2
命令如下 (其中 file1.txt
是包含前文回归结果的文本文件):
xtreg 1x countryDum* $Global1,i(year)
outreg2 using file1.txt,nocons label dec(3) label adjr2 drop(countryDum*) replace
xtreg 1x countryDum* $Global2,i(year)
outreg2 using file1.txt,nocons label dec(3) label adjr2 drop(countryDum*) append
图形也是 do 文件最重要的输出之一,常言道:一图胜千言!需要注意的是,当我们以不同的格式保存图片时,应使用命令 graph export
代替 graph save
。基本用法如下:
graph save Trade_Distance.gph, replace
graph export Trade_Distance.eps,as(eps) replace
graph export Trade_Distance.png,as(png) replace
graph export Trade_Distance.wmf,as(wmf) replace
两条建议:
set
命令为输出图形设置统一格式,比如 set schmo1
等,也可以自定义图形输出的格式。
最后一部分主要介绍一些 Stata 中十分有帮助的命令。
set more off
:当执行的命令在结果窗口上产生大量输出时,Stata 会在某一时刻停止,等待我们按下 Enter 键或空格键后再继续运行。为了避免这种情况,可以在代码开头加上 set more off
。quietly
:告诉 Stata 不要在结果窗口上显示命令的执行情况。当我们想要通过循环创建大量变量时,这一点尤其有用。capture
:允许程序即使遇到错误也能往下运行,这对于耗时很久的程序很有帮助。因为我们不希望程序仅仅因为一条命令行 (例如你写错一个变量名) 中存在微小错误而停止。collapse
:一种重新整理数据的有效工具,可以根据原始变量计算出许多统计量,参考如下:* 计算 exports 的数量,firms 的数量
* 操作后,数据中每个 year-country 仅会保留一个观测值
collapse (sum) x (count) firm,by(year country)
* 更多用法请 help collapse
tag()
:该命令在每次遇到指定变量的不同值或几个变量的不同值时都会创建取值为 1 的虚拟变量。这在处理多个维度的数据集时尤为重要。例如,我们的数据集包括 Year × Country × Product 三个维度,想要统计其中 Country 的数量,这时 tag()
命令将创建一个变量,该变量在每个国家出现时取 1。egen tag_cty=tag(country)
gen nb_cty=sum(tag_cty)
group
:其工作原理与 tag()
命令相同。它会新生成一个变量,每当遇到一个变量或一组变量的出现时,取不同的值。在面板回归中,字符串变量不能使用固定效应,解决这个问题的一种方法是创建一个组变量,简单参考如下:egen country_time=group(country time)
// 根据 country 和 time 两个变量进行分组
* 结果如下
country time country_time
cty1 year1 1
cty1 year1 1
cty1 year2 2
cty1 year3 3
cty2 year1 4
cty2 year2 5
cty2 year2 5
cty2 year2 5
Note:产生如下推文列表的 Stata 命令为:
lianxh dofile, m
安装最新版lianxh
命令:
ssc install lianxh, replace
免费公开课
最新课程-直播课
专题 | 嘉宾 | 直播/回看视频 |
---|---|---|
⭐ 最新专题 | 文本分析、机器学习、效率专题、生存分析等 | |
研究设计 | 连玉君 | 我的特斯拉-实证研究设计,-幻灯片- |
面板模型 | 连玉君 | 动态面板模型,-幻灯片- |
面板模型 | 连玉君 | 直击面板数据模型 [免费公开课,2小时] |
⛳ 课程主页
⛳ 课程主页
关于我们
课程, 直播, 视频, 客服, 模型设定, 研究设计, stata, plus, 绘图, 编程, 面板, 论文重现, 可视化, RDD, DID, PSM, 合成控制法
等
连享会小程序:扫一扫,看推文,看视频……
扫码加入连享会微信群,提问交流更方便
✏ 连享会-常见问题解答:
✨ https://gitee.com/lianxh/Course/wikis
New!
lianxh
和songbl
命令发布了:
随时搜索连享会推文、Stata 资源,安装命令如下:
. ssc install lianxh
使用详情参见帮助文件 (有惊喜):
. help lianxh