8 实战演示:清洗 CSMAR 企业财务数据
本章通过一个完整的实战案例,演示如何使用 Claude Code 清洗 CSMAR(国泰安)企业财务数据,计算常用的公司特征变量。
8.1 任务说明
目标:从企业基本信息和财务报表数据中,计算 5 个企业特征变量:
| 变量 | 含义 | 计算公式 |
|---|---|---|
| Size | 公司规模 | ln(总资产) |
| Age | 公司年龄 | 当年年份 - 上市年份 |
| Lev | 资产负债率 | 负债合计 / 资产总计 |
| Growth | 营业收入增长率 | (本期营收 - 上期营收) / |上期营收| |
| ROA | 资产收益率 | 净利润 / 资产总计 |
额外要求:
- 删除金融行业(行业代码 J 开头)
- 计算出的指标需进行缩尾处理
- 输出:
.do文件、.dta数据集、.md工作小结
8.2 数据概况
本次使用的数据来自 CSMAR 数据库,包含 4 个数据集:
| 数据集 | 文件名 | 主要内容 |
|---|---|---|
| 资产负债表 | FS_Combas.csv |
资产、负债、所有者权益等 154 个变量 |
| 利润表 | FS_Comins.csv |
营业收入、净利润等 80 个变量 |
| 现金流量表(间接法) | FS_Comscfi.csv |
经营/投资/筹资现金流等 27 个变量 |
| 上市公司基本信息年度表 | STK_LISTEDCOINFOANL.csv |
股票代码、行业分类、上市日期等 |
每个数据集都附有 [DES][csv].txt 说明文件,包含完整的变量定义。
8.3 prompt
【data/】里面是实证金融研究用的 A 股上市公司数据,需要清洗合并后计算常用控制变量(Size、Age、Lev、Growth、ROA),对这些指标进行描述性统计。用 stata 完成。
注意事项:删除金融行业(行业代码J*)、计算出的指标要缩尾
- 我不确定具体要执行哪些数据清洗操作,需要你结合数据结构和数据处理的惯例判断
最后输出三个文件:处理数据的.do文档;处理后数据集.dta文件;数据处理工作小结.md文档(包含数据处理操作和最后的描述性统计结果)
8.3.1 关键发现
AI 通过读取说明文件和导入样本行,发现了以下关键信息:
1. 变量名不统一
不同数据集使用不同的变量名来表示相同的概念:
- 股票代码:基本信息表用
Symbol,其他表用Stkcd - 报告期:现金流量表用
EndDate,其他表用Accper
2. 金额以字符串存储
CSMAR 的 CSV 文件中,金额类字段以字符串格式存储(如 "19802000000.00"),Stata 导入后需要通过 destring 转为数值型。
3. 报表类型区分
每家公司同时有合并报表(Typrep = "A")和母公司报表(Typrep = "B"),需要筛选保留合并报表。
4. 报告期频率
数据包含年度(12-31)和季度报告,实证研究通常只保留年度数据。
8.4 计划阶段
AI 根据探索结果生成详细的数据处理计划书,包含以下步骤:
- 预处理:导入 4 个数据集,保留合并报表(
typrep == "A")、保留年度数据(accper以 “12” 结尾) - 变量准备:重命名统一标识符(
Symbol → Stkcd,EndDate → Accper),字符串转数值(destring) - 去重:以
stkcd + year为键去重 - 合并:以
stkcd + year为键,依次合并 4 个数据集 - 样本筛选:剔除金融行业(行业代码 J 开头)、剔除 ST 股票、剔除总资产为负的异常值
- 变量计算:计算 Size、Age、Lev、Growth、ROA
- 缩尾:对计算的指标在 1%/99% 分位数进行缩尾
- 描述性统计:输出均值、标准差、最小值、最大值等
8.5 执行阶段
确认计划无误后,AI 开始执行。整个过程约 10 分钟。
8.6 输出结果
执行完成后,AI 生成以下文件:
| 输出文件 | 位置 | 说明 |
|---|---|---|
| 数据处理代码 | code/ |
完整的、带注释的 .do 文件 |
| 清洗后数据 | data/processed/ |
.dta 格式的清洗数据集 |
| 工作小结 | file/ |
.md 格式的处理报告,包含每步操作和描述性统计结果 |
8.7 经验小结
- 在 CLAUDE.md 提前写明路径规范和目录约定,可以避免重复沟通或者试错
- 对计划或者完整流程不确定的时候,可以用 plan mode,把确定的部分写下来,让 AI 完善