seedling

Claude Code 实证研究全流程(四·完结):用 Stata MCP 跑通数据导入、清洗与回归

照着一份完整的操作记录走完后半程:怎么找到并接上 Stata MCP,怎么用一句话让 Claude Code 把数据导入、清洗、合并成面板,再跑回归与稳健性。每一步研究者定什么、它执行什么、要盯哪些坑。重点是流程与人机分工。

本篇要回答的

照着一份完整的操作记录走完后半程:先找到并接上一个能让 Claude Code 调用 Stata 的 MCP 工具,再用它把原始数据导入、清洗、合并成分析面板,跑描述统计与主回归,最后导出三线表 Word。看清这一段里哪些是研究者拍板、哪些交给 Claude Code 与 Stata 执行。

前三篇把工具定位、流程地图、项目制管理,再到文献调研与研究计划讲完了。这是收束的一篇,落到最动手的后半程:让 Claude Code 真正调起 Stata,把原始数据导入、清洗、合并成一份能跑回归的面板,再出描述统计、跑主回归与稳健性。这一篇照着一次完整的会话走,讲的是每一步怎么驱动 Claude Code、哪里该由你拍板、哪里交给它执行;这份耐心资本研究最后算出的具体结果不展开。后半程就照后面这五步走,一步接一步:先接上 Stata MCP,把数据导入清洗成面板,跑描述统计与主回归,做内生性与稳健性这组检验,最后导成三线表。

第一步 · 接上一个能调本地 Stata 的 MCP 工具

要让 Claude Code 跑 Stata,得先给它一个能调起 Stata 的 MCP 工具。会话第一句就是问有没有合适的,查下来当前环境里已经接好了一个,系统提示里能看到 mcp__stata-mcp__* 这一系列工具。它来自 PyPI 上的 stata-mcp 包,作者是 Sepine Tam,安装一行命令就够:claude mcp add stata-mcp -- uvx stata-mcp,配置写在 ~/.claude.jsonmcpServers 字段里。

接上之后先跑一个最轻的命令确认进程能起,让它调 help describe,能返回 describe 命令的完整文档就说明本地 Stata 进程拉得起来。这个 MCP 对外给五个工具,主力是 stata_do,把 do 文件交给它执行、再返回日志;另外 get_data_info 看 dta、csv、xlsx 的结构,read_log 解析落盘日志,help 查文档,ado_package_install 装第三方包。

Stata MCP 连的是本地的 Stata,跟你手动打开的那个 Stata 图形界面是两个互相独立的进程。图形界面有自己的内存和数据集,MCP 每次调 stata_do 是另起一个命令行进程、跑完即退,两边不共享内存、不共享数据。你在界面里 use 的数据,MCP 那边看不见;MCP 跑的回归,界面里也不出现。所以 MCP 的结果只能通过 Claude Code 回传,落地形式是每次写到项目下的 .log.smcl 日志。

这个工具还自带一道沙箱:do 文件必须放在它允许的目录里。会话里第一次把探测 do 文件写到 /tmp 就被拒了,报 Access denied: outside allowed directories,移进项目下指定目录才跑通。后面所有 do 文件都放进这个目录即可。

Claude Code 接入并验证本地 Stata MCP:加载五个工具、用 help describe 跑通确认进程能起、从 ~/.claude.json 确认走 uvx stdio 连本地 StataMP

第二步 · 把原始数据导入、清洗成面板

工具接好,下一步是让它把项目里那堆原始数据收拾成一份能跑回归的面板。原始数据散在好几个模块、几十个文件里,dta、xlsx、csv 混着、字段命名也各不相同。从这堆原料到一张面板,要按主键合并、去重、处理缺失、构造变量。指令交代清楚之后,Claude Code 会先进计划模式盘点数据、再分阶段写脚本执行。

每导一套数据,先 probe 一遍字段,再写正式的导入脚本,因为原始文件的列名、脏数据、单位都得先看清。华证 ESG 那份有五万多行,导进来才发现综合得分是字符串、得 destring,时间字段里还混进了字面值”时间”这样的脏数据要清掉。这些都是 probe 完才暴露、写进脚本去处理的。装包也是一样,第一遍 reghdfeestout 这些 SSC 包里有几个会装失败,靠日志看清哪个没装上、单独重试才补齐。

财务那套数据导进来,发现利润表只有营业收入、没有净利润,常用的 ROA 因此构造不出来。这时候是研究判断在做事:改用经营现金流比总资产作盈利能力的代理,并在文档里写明这处数据局限。Claude Code 能告诉你字段缺了什么,换哪个代理、要不要在论文里交代局限,是你定的。

Claude Code 调 Stata MCP 装回归用的 SSC 包、用 get_data_info probe 华证 ESG 字段、再用 stata_do 跑导入脚本;probe 时发现利润表没有净利润这处缺口

把几套数据按公司代码和会计年度合并成主面板时,样本量常莫名其妙少几百行,往往就出在合并键和缺失处理上,得靠日志逐步回查。合并后再对连续变量按 1% 和 99% 分位缩尾,最终落成一份两万多观测、覆盖十几年的面板。用哪个键合并、缺失是删是补、异常值缩不缩尾,每一处都是研究判断。喂材料时要给的一份是变量字典,写清每个变量在哪个文件、什么类型、什么单位,再说明你要的面板长什么样,脚本才贴合。

Claude Code 调 stata_do 把三套数据各自构造变量、按 stkcd 与年度合并、winsor2 缩尾,落成两万多观测的面板;合并是隐性错误高发处,靠日志逐步回查

第三步 · 跑描述统计与主回归

面板立住后先出描述统计。让 Claude Code 用 estout 把均值、标准差、极值、样本量列成表 1,相关系数列成表 2,你拿来核一眼样本面貌正不正常。中途有个工具不支持的小命令报了错,不影响主交付、照实跳过就行。这类小报错在实际操作里很常见,看日志确认无碍即可。

Claude Code 调 stata_do 跑 do5_desc_corr.do 出表 1 描述统计与表 2 相关性;estpost 不支持的小命令报错照实跳过

主回归这一步,先由研究者把模型设定定下来:被解释变量、核心解释变量、控制变量放哪些、固定效应控制到哪一层、标准误怎么聚类。这些定清楚,再用一句 prompt 交给 Claude Code,让它写成 reghdfe 的 do 文件、调 Stata 执行、把日志回读回来。第一次跑常会缺个依赖包,装上重跑就行。

Claude Code 调 stata_do 跑 reghdfe 主回归:先补上缺的依赖包,再让耐心资本三种测算口径各跑一遍、结果一并落表,选哪个进主表由研究者定

docx-js 生成的主回归三线表(表 3 基准回归):四列分别是仅控制、耐心资本的 A2 主口径 / A1 经典 / C 熵值法,标准三横线、全程无竖线

让 Claude Code 把核心解释变量的几种测算口径各跑一遍主回归,结果一并列出,由你来选哪个进主表。选择权留在你手里,是因为换一种测算方式,核心系数的显著性可能就翻面。这种口径选择是研究判断,不能交给工具。它的职责是把每种口径如实跑出来。

结果解读这一步容易暴露 AI 腔,让它写系数解读,常写出形容词堆叠、把结论往大里拔的腔调。喂材料时把这层管住:给本领域论文的实证段落做范本,要求平实陈述系数多大、在什么水平显著、方向跟假设是否一致,变量名沿用研究里既定的说法。主回归同样走交叉复核:Claude Code 跑出来的结果,自己再用 Stata 手动跑一遍同样的设定,系数、标准误、样本量逐一对齐,两端一致才算立得住。

第四步 · 做内生性、机制、异质性与稳健性检验

主回归立住后,第二阶段把内生性处理、机制检验、异质性、稳健性一组跑齐。这些检验彼此独立,正好让 Claude Code 批量做。

批量跑这组检验,会撞上几类工程问题:bysort 改了排序导致滞后算子出错、要先 sort 再算;某个外部包没装、得补装;嵌套 preserve 报错、得把脚本拆开收尾。这些都不是研究问题,是操作问题,靠日志逐个定位、让 Claude Code 改脚本解决。把它们交给工具处理,正是批量做这组检验省时间的地方。

Claude Code 批量跑第二阶段:IV 与 PSM、机制、异质性、稳健性各一个 do 文件,过程中撞上排序、缺包、preserve 这些工程问题,靠日志逐个解决

机制和异质性这两块,尤其要研究者自己判断。机制检验跑出来要是跟预期不符,比如某条通道的方向跟你假设的相反,这种结果照实交付,由研究者判断是机制设定的问题还是理论本身需要修正,工具不替人圆结论。异质性比稳健性更要判断:分组之前得先有一条说得通的机制假设,先有机制再分组验证才有意义;为找显著结果到处试分组,就成了数据挖掘。机制从哪来,落回文献和理论,这件事 Claude Code 给不了你。

docx-js 生成的异质性分析三线表(表 9):按规模、杠杆、产权、上市时长四个维度分组的子样本回归

稳健性这块是替换核心变量的测度、换被解释变量的口径、加滞后期,让 Claude Code 排成一个矩阵批量跑。稳健性段落每个结论后面都跟一句”这说明……”:替换测度后仍成立就写清结论不依赖特定口径,加滞后期看到的就写清效应有没有时滞。让 Claude Code 起草这些段落时把要求交代下去,再自己核每一句”这说明”站不站得住。

docx-js 生成的稳健性检验三线表(表 10-A):替换耐心资本测度口径后的回归结果

第五步 · 把回归结果导成三线表 Word

研究计划里点名要 Word 文档、每张表用三线表。这一步遇到一个工具限制,代表了一类常见的返工,记在这里。第一版用 Stata 的 putdocx textfile 把导出的 RTF 表嵌进 docx,生成的文档里表格全是乱码。拆开 docx 的结构一看,里面一张真正的表格都没有,RTF 控制码以裸文本形式塞了进去:putdocx textfile 把 RTF 当纯文本嵌入,没转成 Word 表格,控制码就裸露成了”乱码”。这是它的已知限制。

换条路线。先用 esttab 把表导成 CSV,中文在 CSV 里完全正常,绕开 RTF 的中文转义问题;再用一个能精确控制 Word 结构的库读 CSV、原生构造三线表:表头顶部一条粗线、表头底部一条细线、数据末行一条粗线,全程无竖线,中西文各用对应字体。生成的文档过了校验,干净落地。

Claude Code 导三线表 Word:putdocx 嵌 RTF 导致表格乱码、w:tbl 个数为 0,换成先导 CSV、再用 docx 库原生构造三线表,过校验

docx-js 实际跑出来的三线表 Word(表 1 主要变量描述性统计):标准三横线、全程无竖线,中文宋体与黑体、西文数字 Times New Roman,过 validate 校验

让 Claude Code 产出格式化交付物时,中间格式选错会整段返工,这是一类通用的教训。纯文本中转比让工具直接吐富文本稳妥,最终格式交给能精确控制结构的库来生成。具体走哪条路线由研究者拍板:工具自带的推荐和它的限制都摆出来,看清根因再决定换哪条路。

收尾 · 整条流水线的分工与交叉校验

把这几段连起来看,从找工具、接 Stata MCP,到导入清洗、描述统计、主回归、稳健性、出表,研究者与 Claude Code 的分工是清晰的。

实证研究后半程的三栏分工总览表:找配 MCP 工具、数据导入清洗、描述统计、主回归、内生性与稳健性、结果出表各环节,左列是研究者拍板的判断如口径选择与机制假设,右列是 Claude Code 与 Stata 接手的执行如写 do 文件、跑回归、导三线表

越靠近定方向的环节,Claude Code 能帮的越少:核心变量用哪个测算口径、控制变量放哪些、识别策略怎么设、机制假设站不站得住,这些是研究的内核,判断权在研究者手里。越靠近做执行的环节,它接手得越彻底:装包、写 do 文件、跑回归、批量出稳健性、导三线表。一篇实证论文的价值落在前者,效率的提升来自后者。

整个系列反复回到同一个收尾动作。从清洗到主回归再到稳健性,每个关键结果都让 Claude Code 调 Stata MCP 跑一遍、留下完整 do 文件,主回归再由研究者用 Stata 手动复跑核对,两端结果对齐才落进论文。换口径系数会翻面、有些结果跟预期不符,这些都让它如实回传。

四篇到这里收尾。工具摆对位置、流程看全、项目管好,再把文献调研、研究计划、数据导入清洗、回归与稳健性逐段走通,一篇实证论文从开题到出表就有了完整的操作路径。Claude Code 把执行接成连续的流水线,研究的判断始终留在研究者这边。这是整个系列的主线。