在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
选项谨慎控制内存数据,确保外部代码执行后数据按预期保留或清除。