B2a. Stata 工作流程
1. 工作流程概览
Source: 连玉君, 陈鑫梅, 2020, 可重复性研究:如何保证你的研究结果可重现?, 连享会 No.124.
图 3 展示了一个典型的实证分析工作流程。你在本地或网盘中的文件夹中存如原始数据文件,然后在 Stata 中执行命令,以实现数据读入、清洗和分析,最后把结果输出成表格和图形,嵌入到 Word 或 TeX 文档中。
简言之,我们要实现「数据 → 代码 → 结果 → 文档」的有机衔接,让研究流程清晰透明,也方便日后重复或更新分析。
图 3:Stata 工作流程示意图
左:本地文件夹
本地文件夹:D:/paper/myAER,其中包含三个文件夹和一个 dofile:
- “./data0”:存放原始数据文件,如 data_org.xlsx
- “./dataClean”:存放清洗后的数据文件,如 data_clean.dta
- “./out”:存放输出结果,如回归表格 Table01.rtf 和图形 Fig01.png
dofile_myAER.do
:Stata do 文档,记录所有处理过程。
采用这种分类管理方式,无论是查看数据源还是寻找输出文件,都能快速定位。与合作者分享论文复现资料时,也只需分享 dofile_myAER.do
和 “./data0” 子文件夹即可。合作者运行 dofile_myAER.do
后变会自动生成清洗后的数据文件和结果文档。
右:dofile
右上角打开的 dofile_myAER.do 是我们向 Stata 下达指令的脚本文件 (dofile
)。具体解释如下:
- 首先,使用
global path "D:/paper/myAER"
命令,指定了项目文件所在路径,并以此为基础定义了几个相对路径。在后续命令中,便可以使用$path
,$data0
等全局暂元来引用这些路径,而不必每次都手动输入完整路径。你的合作者只需酌情修改第 4 行的文件路径 (绝对路径),而无需做其他更改。 - 接下来,在
dofile
中写好一系列命令,以便完成数据导入、清洗、回归以及结果输出等一整套流程。有了dofile
,只需轻轻点一下执行按钮,就能让整套分析重复进行,也可以让修改和完善工作更有效率。 - dofile 中的第 15, 20 和 24 行都用于输出结果,分别将清洗后的中间数据,回归表格,以及生成的图形存储到项目文件夹 D:/paper/myAER 中的指定子文件中。随后你只需将这些表格和图形插入论文 Word 文档中即可。
中:Stata 主界面
在 Stata 的主界面中会呈现回归结果、显示输出的图片等。比如,
- 执行
reg price wei mpg, robust
命令后,可以在 Stata 的结果窗口查看回归结果 - 进一步执行
esttab using "$path/out/Table01.rtf", replace
命令时,结果窗口中会显示自动输出的 .rtf 文档 (等同于 word 文档) 的存储路径 (单击蓝色链接可以打开此文档)。 - 执行第 22-23 行的命令后,就会绘制散点图,并将图片以 .png 格式存储到
$out
文件夹中。
小结
总之,dofile 就像一个中心控制台:我们在 dofile 中下达命令,以便从指定路径中导入 Excel, txt, dta 等格式的数据文件,进而进行统计和回归分析,并最终将输出的图形、表格等结果保存到指定文件夹中,以便随后插入 Word, TeX 等写作文档中。
2. Stata 安装路径和个人文件夹的设置
安装 Stata 时,文件路径中尽量不要包含中文、空格和特殊字符。否则,会导致涉及读写或保存文档的程序无法运行。我个人通常将 Stata 安装在 D 盘根目录下,如 D:/stata17。
我会在 D 盘中另外建立一个文件夹 D:/stata,其中,
- 新建 personal 文件夹,用以保存我自己的数据和程序文件;
- 新建 plus 文件夹,用以存放外部命令。
这样做的好处是,无论 Stata 更新到哪个版本,我个人的文件都不会受到任何影响。例如,更新到 Stata 18 后,我只需将 D:/stata17/profile.do 文档复制到 D:/stata18 目录下即可。
2.1 Stata 17 目录下的文档结构
Stata 安装目录 D:/stata17/
的文档结构如下:
D:/stata17::
--- 解释 ---
├── ado
│ └── base | Stata 官方提供的程序文件(按 _, A-Z 分类)
├── docs | Stata 电子手册(PDF 格式),便于查阅
└── utilities | 包含 JAVA、Python 等插件和工具
│ profile.do | Stata 启动时自动执行该文件中的命令
│ mp-64.dll | Stata 运行所需的动态链接库文件
│ STATA.LIC | Stata 的许可证文件,用于验证软件合法性
│ StataMP-64.exe | Stata 的主执行文件,用于启动程序
│ StataMP-64_old.exe | 旧版本的 Stata 执行文件(备份或兼容用途)
说明如下:
- 不要随意修改
ado/base
目录中的文件,以免影响 Stata 的正常运行。 - 可以通过编辑
profile.do
文件来定制 Stata 的启动行为,例如设置工作目录或加载常用脚本。后文会详细介绍。 - 如果需要使用插件或外部工具,可以将相关文件放置在
utilities
目录中,确保路径正确。我们通常无需自行设定,再安装或关联外部插件时,Stata 会自动将相关文件存入此处。
2.2 个人文件夹的文档结构
存放我个人文档的目录 D:/stata/
的结构如下:
D:/stata::
--- 解释 ---
├── personal | 存放个人文档 (数据, dofiles 等)
│ ├── data
│ ├── paper
│ └── ...
├── do | 存放自动生成的日志文件
└── plus | 存放外部命令
说明如下:
- personal 目录下可以根据需要设定多个子文件夹,用于分类存储不同项目的文件。基本原则是,一个项目一个文件夹。
- do 目录用于存放自动生成的日志文件 (log 文件),记录 Stata 运行过程中的命令和输出结果,复现分析过程或排查问题。随后在 profile 文档 部分会有详细介绍。
- plus 目录用于存放通过
net install
或ssc install
等命令安装的外部命令 (ado 文件)。
当然,你也可以酌情添加其他文件夹。
3. 工作路径 (Working Directory)
在 Stata 主界面的右下角会显示当前 工作路径/目录(Working Directory),是 Stata 默认的文件读取和保存位置。比如,执行 use mydata.dta
时,默认从当前工作目录下读取 mydata.dta 数据文件 (如果该目录下未保存 mydata.dta 文件,则 Stata 会报错);执行 save newdata.dta, replace
时,newdata 文件会自动保存到当前工作目录下。
要在结果窗口中显示当前工作路径,可以执行 cd
或 pwd
命令。若需切换工作路径,只需在 cd
(_c_hange _d_irectory) 命令后写上新的工作路径名称即可,例如 cd "D:/Projects/SJ_paper"
(注意:必须是已经存在的文件夹路径)。合理设置工作目录不仅能减少重复输入路径的麻烦,还能让文件管理更加清晰高效,是 Stata 使用中的一项基础但重要的操作。
4. Stata:执行命令和工作机制
我们可以通过三种方式与 Stata 互动:
- 点击菜单 (新手适用,老手偶尔为之)
- 命令窗口 (简单的测试性任务)
- dofile (主要方式)
4.1 机制 1:把数据和程序拖入内存中
初学者很怕见到 clear
命令。事实上,如果你了解 Stata 的运行机制,就会明白,clear
是一个非常安全的命令。具体说明如下:
启动 Stata 时,电脑会分配给 Stata 一块 内存空间 (一座大房子)。解读如下:
- 当我们执行
use D:/myData/auto.dta
命令时,Stata 会把存储于 D:/myData 文件夹中的auto.dta
文件复制 (copy) 一份,读入内存。随后,执行sum
,reg
等命令时,Stata 都是从内存中读取这个副本数据,而无需再访问硬盘中的数据文件,即D:/myData/auto.dta
。这样的好处是,可以大幅提高运算速度。缺陷在于,但计算机可以分配给 Stata 的内存空间有限时,Stata 会因为无法读入大文件,或运行中出现卡顿现象。 - Stata 执行程序时也采用了上述逻辑。当我们执行
tabstat var1
时,Stata 会先到 D:/stata17/base/t/ 文件夹下找到名为tabstat.ado
的程序文件,进而将其读入内存中再执行。当我们再次执行tabstat var2
时,Stata 会直接从内存中执行tabstat.ado
副本,而无需再访问硬盘的原始程序文件,即 D:/stata17/base/t/tabstat.ado。
Stata 会把「大房子」分成若干个小房间,分类存储 Data, Matrix, 返回值, 程序 等对象。若想清空某个「小房间」,可以使用 clear 房间类型
命令,例如:
clear
:清空内存中的数据 (分配给 Stata 的内存中的 【Data】 那一块空间)clear matrix
:清空内存中的矩阵对象clear results
:清空内存中的返回值,如r(mean)
,r(N)
,e(r2)
等clear all
:清空分配给 Stata 的所有内存空间
有关 clear
命令的详情,请参阅 help clear
,或 [D] clear。
作为例子,我们来解释一下如下命令的的含义:
use "D:/myData/auto.dta", clear
上述命令等价于:
clear
use "D:/myData/auto.dta"
也就说,虽然 clear
选项置于命令的末尾,但却是最先被执行的,它会清空内存中已有的数据文件。然后,Stata 从硬盘 (D:/myData/) 中拷贝 auto.dta 文件,并将该副本读入内存。
4.2 机制 2:结果呈现和输出
当我们按下图的方式执行 sum price
命令后,Stata 会同时以两种方式输出结果:
- 方式 1:将部分结果直接呈现于 结果窗口,通常会以特定的格式排列,可读性强。
- 方式 2:所有计算结果都会存入 内存 (按类别存入不同的 房间)。
- 这些结果统称为返回值 (return values)。对于
sum
,tabstat
等命令,可以使用return list
命令显示之;对于regress
,logit
,xtreg
等回归类命令,可以使用ereturn list
命令显示之。 - 这些结果可以被后续代码调用,如
gen x_mean = r(mean)
- 也可以借助
esttab
,outreg2
,reg2docx
等命令调用后,输出到 Word 等文档中。
- 这些结果统称为返回值 (return values)。对于
简言之,你在 Stata 结果窗口中看到的只是一部分结果,这些结果以及其他相关结果都会被分门别类地存储在内存中,以便其他程序调用。如此以来,我们就可以让多个程序合作,采用「接力」的方式完成复杂的分析任务。
5. 扩展阅读
杨涵慧, 2024, 妙招:Stata 实用小技巧大全, 连享会 No.1341.
- 张弛, 2024, Stata代码规范指南, 连享会 No.1452.
- 徐云娇, 陈滨志, 2020, 苹果用户:Stata for Mac 使用指南, 连享会 No.217.
- 汪京, 2024, Stata代码规范指南, 连享会 No.1377.
- 游万海, 连玉君, 2019, Stata: 外部命令的搜索、安装与使用, 连享会 No.1.
- 连享会, 2020, Stata:快速转换工作路径, 连享会 No.387.
- 连玉君, 2021, Stata安装路径中不要包含中文字符和空格:stacktrace not available错误信息, 连享会 No.511.