Stata 工作流重整笔记
Stata-Workflow
第 1 部分:文件夹(Folders)
文件夹的结构组织和内容的「分门别类」
- raw:包含所有的原始文件
- dofiles:包含所有用于处理、清理和分析原始文件的脚本
- temp:包含从原始数据中生成的中间文件
- master:包含准备用于分析的最终数据
- GIS:包含空间地理文件
- graphs:包含图表
1.1 小型项目的组织

[!tip]
按照文件夹的使用顺序进行编号。 (添加数字前缀)
[!example]
项目完成过程中,会先获取到原始数据(01_raw),然后再编写 dofiles(02_dofiles)。在写 dofiles 时,你会创建临时文件(03_temp),之后再保存在主文件夹(04_master)中。你也可能有空间数据(spatial data),可以在自己的文件夹中进行(05_GIS)。一旦数据清洗完毕,就可以用来生成表格(06_tables)和图形文件(07_figures)。
[!tip]
TIP:文件或文件夹名中尽量避免使用空格(spaces)、连字符(_-)或大写字母(_capital letters)。(应该使用下划线)
1.2 大型项目的组织

这里的「数据」文件夹有原始数据和清洗原始文件的 dofile。目的是为了在主文件夹中生成 最终 的数据文件。这种设置对于那些在数据处理和加工方面非常庞大的项目来说非常有效。
数据文件夹中的 dofile 目的是在做完各种清洗、合并、处理等工作后把所有的东西放在一起,因此数据使用一个单独的文件夹也可以帮助整齐地记录步骤,而且大多数时候,一旦创建了最终的数据集,把数据放在一起的大型脚本就显得多余了,除非需要做一些修改。一旦主文件被创建,数据管理的这一部分基本上应该保持不动。
主数据文件可以应用在多个具体的项目文件(paperX)中,该文件夹与小项目文件夹的结构相同,但它还包含一个设置文件(setup file)用于进一步合并、追加、修改数据。所以这里的「数据」文件夹中的主数据集基本上扮演了论文文件夹中的原始数据的角色。
[!tip]
扔掉你在特定论文中不需要的变量,每一个未使用的数据点都是内存的一个负担。
[!tip]
写一个readme.txt文件。
第 2 部分:命名规则(Naming conventions)
添加数字前缀有助于分类和与工作流程保持一致;添加版本后缀便于保持跟踪(_v1、_v2)等等。版本号也可以用日期来代替,例如 01_setup_210531.do、01_setup_210602.do 等。这里的命名规则对所有的 dofiles、图、表、Word 文件均有效。
[!tip]
使用日期时遵循年月日格式
[!tip]
隐藏旧的版本
第 3 部分:拆分 dofile(Splitting Tasks across dofiles )
每个 Do 文件只做一件事儿
01_setup.do
02_merge.do
03_tables.do
04_regressions.do
05_figures.do
06_master.do
细化:
* 01_setup_v4.do
* 01_setup_emissions_v1.do
* 01_setup_economic_v4.do
* 02_merge_v2.do
* 03_tables_v11.do
* 03_table1_v1.do
* 03_table2_v4.do
* 04_regressions_v15.do
* 04_regression1_v2.do
* 04_regression2_v6.do
* 05_figures_v2.do
* 06_master_v1.do
[!tip]
在同一 dofile 中划分代码 (partition the code)
如果你要在同一个 dofile 中生成不同的图、表,一定要写清楚便于日后在 dofile 里分割,或者直接分割为不同的 dofile。
[!tip]
核心变量生成放在setup.do或者merge.do中,或者至少放在 dofile 开头并注释
*_master_*.do 比较特殊,可以在不破坏数据的情况下一次性运行所有内容。为了做到这一点,最好使用相对路径(relative paths)
**** <some project info here> ****
clear
<some directory setting stuff here>
<some paths to folders. usually defined as globals>
<other macros for tables/regressions here>
// run all the dofiles
do ./dofiles/01_setup_v11.do
do ./dofiles/02_merge_v2.do
do ./dofiles/03_tables_v4.do
do ./dofiles/04_regressions_v5.do
do ./dofiles/05_figures_v2.do
*** END OF FILE ***
除了 *_master_*.do 之外的 dofiles 主打数据分析,而 *_master_.*.do 则进行 dofiles 管理。
[!tip]
每个 dofile 应该能独立运行
[!tip]
如果你正在运行多个 dofiles,那么要确保当一个单独的 dofile 结束执行时,它总是重置到运行下一个 dofile 所需的目录级别。
第 4 部分:文件相对路径(Making Use of Relative File paths)
[!tip]
文件路径一定要用/
宏包含全局宏(global)和局部宏(local),区别是一个代码实例结束后,locals 便会消失,而 globals 会永久地存储在内存中,直到关闭 Stata。虽然可能会有风险,但在定义路径方面颇有用处。
clear
*** replace this with your main directory path
global projectdir "C:/Program files/Dropbox/myproject/" global graphdir "$projectdir/graphs"
global tabledir "$projectdir/tables"
cd "$projectdir"
cd "$graphdir"
cd "$tabledir
[!tip]
确保全局名称不与变量名称相冲突。
第 5 部分:风格化代码(Styling Your code)
- 注释:Commenting
- 跨行拆分过长代码
/// - 用于间隔的制表符 tab ```
- comments on individual lines // comments on individual lines and after some code /* // for marking out code blocks */ twoway /// (connected y1 x1, msize(vsmall)) /// (connected y2 x2, msize(vsmall)) /// , /// xlabel(-1(0.5)1) /// ylabel(-1(0.5)1) /// xline(0) /// yline(0) /// aspect(1) ```
Event Study
20251027
身份代码是数值型类型使用 double
tabulate 中 ‘missing
egen
bysort
m: m 拆分成 m 个 1: m 再操作…(只有 1:1,1: m, m: 1 有效)