在Stata中,包含命令主要用于将外部数据、程序代码或结果整合到当前分析环境中,提高代码的模块化程度和复用性,以下是Stata中常用包含命令的详细说明及其应用场景。

include命令
include命令用于将外部Stata代码文件(.do文件)的内容直接插入到当前执行流程中,相当于将外部代码复制粘贴到当前位置执行,该命令不会改变当前的工作环境,如变量名、内存数据等保持不变。
语法格式:
include filename [using filename] [, clear]
关键参数:
filename:指定要包含的.do文件路径,需为完整路径或相对于当前工作目录的相对路径。using:可选参数,用于指定包含数据文件的路径(需与include结合使用,但实际数据加载需配合import或use)。clear:可选参数,若外部代码包含clear命令,则执行后会清除当前内存数据。
示例:

include "C:\project\sub_analysis.do" // 执行外部代码文件
注意事项:
- 被包含的文件必须为合法的Stata代码文件,且不能包含交互式命令(如
browse)。 - 若外部代码中修改了全局宏或临时变量,可能会影响当前环境。
do命令
do命令用于执行外部.do文件,与include不同,do命令会在独立的子环境中运行外部代码,执行完毕后返回主环境,但不会保留子环境中的变量(除非使用preserve/restore)。
语法格式:
do filename [arguments]
关键参数:

filename:指定.do文件路径。arguments:可选参数,向外部文件传递局部宏(需在外部文件中通过args接收)。
示例:
do "C:\project\regression.do" var1 var2 // 传递参数var1和var2
外部文件(regression.do)接收参数:
args depvar indepvar regress `depvar' `indepvar'
与include的区别:
do更适合执行独立的分析模块,而include适合需要无缝衔接代码的场景。do不会污染当前环境的变量,但无法直接获取子环境的计算结果。
run命令
run命令是include的简化版本,功能完全相同,但语法更简洁,常用于交互式命令窗口快速执行外部代码。
语法格式:
run filename
示例:
run "C:\project\quick_test.do"
insheet/infix等数据导入命令
虽然严格来说不属于“包含”命令,但insheet(导入CSV)、infix(固定格式数据)、import excel等命令常用于将外部数据“包含”到Stata中,是数据分析流程的重要环节。
示例:
insheet using "data.csv", clear // 导入CSV数据
import excel "data.xlsx", sheet("Sheet1") firstrow clear // 导入Excel数据
adopath与ssc install:扩展命令的包含
Stata允许通过adopath添加外部命令路径,或通过ssc install安装社区贡献的命令,从而“包含”额外的功能模块。
示例:
ssc install estout, replace // 安装estout命令并添加到路径 adopath + "C:\user\ado" // 添加自定义命令路径
综合应用场景示例
假设有一个项目包含主分析文件(main.do)和多个子模块(data_clean.do、regression.do),可通过以下方式组织代码:
主文件(main.do):
version 17 clear all set more off // 包含数据清洗模块 include "code\data_clean.do" // 执行回归分析(传递参数) do "code\regression.do" price mpg weight // 保存结果 save "results/final_data.dta", replace
数据清洗模块(data_clean.do):
use "raw_data/auto.dta", clear drop if missing(price, mpg) gen log_price = log(price) save "temp/clean_data.dta", replace
回归模块(regression.do):
args yvar xvars use "temp/clean_data.dta", clear regress `yvar' `xvars' estimates store model1
常见问题与解决方案
-
包含文件路径错误导致无法执行
原因:Stata无法找到指定路径的文件,可能因路径未加引号或使用了错误的分隔符(如Windows反斜杠\需改为正斜杠或双反斜杠\\)。
解决:使用cd命令切换到文件所在目录,或使用绝对路径(如"C:/project/file.do")。 -
include与do的变量污染问题
原因:include直接执行外部代码,若外部代码修改了全局宏或变量,会影响当前环境;do则在子环境中执行,变量无法传递回主环境。
解决:- 对于
include,在外部代码中使用tempfile或preserve/restore隔离数据修改。 - 对于
do,通过return list或ereturn list获取子环境的返回结果。
- 对于
FAQs
Q1: include和do命令在变量传递上有何区别?
A1: include会直接执行外部代码中的所有命令,外部代码中定义的变量或宏会直接作用于当前环境,可能导致变量名冲突;而do命令在独立子环境中运行,外部代码中的变量不会影响主环境,但主环境也无法直接获取子环境的变量值,若需传递参数,do可通过args接收命令行参数,而include需通过全局宏(如global)实现。
Q2: 如何在包含外部代码时避免覆盖当前数据?
A2: 可采用以下方法保护当前数据:
- 在外部代码开头使用
preserve,结尾用restore恢复数据状态。 - 使用
tempfile创建临时数据集,避免修改原始数据。 - 通过
clear选项谨慎控制内存数据,确保外部代码执行后数据按预期保留或清除。
