在实证研究中,我们经常需要处理财务报表数据,计算各类金融指标。今天,我将带大家一步步解析一段Stata代码,看看如何从原始Excel文件出发,最终计算出“短债长用”和“短贷长投”这两个重要指标。
一、数据导入与预处理
1. 导入现金流量表数据
ounter(lineounter(line* 导入excel文件,修改路径("/Users/hahaha/Downloads/现金流量表(直接法)200740394(仅供vip使用)/FS_Comscfd.xlsx")即可import excel "/Users/hahaha/Downloads/现金流量表(直接法)200740394(仅供vip使用)/FS_Comscfd.xlsx",firstrow clear
语法解析:
import excel:Stata导入Excel文件的命令
2. 处理合并单元格的标签
ounter(lineounter(linelabone, nrow(1 2) concat("_") //将第一行和第二行的文字通过_合并变为labeldrop in 1/2 //删除第一行到第二行
语法解析:
labone:外部命令,需要先安装(ssc install labone)nrow(1 2):指定第1行和第2行作为标签来源drop in 1/2:删除第1行到第2行的观测值
3. 生成年份变量并筛选数据
ounter(lineounter(lineounter(linegen year= real(substr(Accper,1,4)) //生成年份变量,sustr提取字符变量Accper第1个字符至第4个字符,real将其从字符变量转为数字变量keep if Typrep=="A" //保存观测值,如果变量Typrep中字符为Akeep if substr(Accper,6,2) == "12" //sustr提取字符变量Accper第6个字符至第7个字符
语法解析:
substr(Accper,1,4):提取Accper变量的第1到第4个字符Typrep=="A":筛选报表类型为A(可能是年报)substr(Accper,6,2) == "12":确保是12月份的报表
4. 保存处理后的数据
ounter(lineounter(linelabel var year "年份" //变量year增加labelsave "/Users/hahaha/Downloads/短贷长投_资产现金流量表.dta",replace //保存文件夹,replace(如果存在该文件夹则替代)
语法解析:
save..., replace:保存数据,如果文件存在则替换
5. 导入并处理资产负债表数据
ounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineimport excel "/Users/hahaha/Downloads/资产负债表200518779(仅供vip使用)/FS_Combas.xlsx",firstrow clearlabone, nrow(1 2) concat("_")drop in 1/2gen year= real(substr(Accper,1,4))keep if Typrep=="A"keep if substr(Accper,6,2) == "12"label var year "年份"save "/Users/hahaha/Downloads/短贷长投_资产负债表.dta",replace
二、数据合并
ounter(lineounter(lineounter(lineounter(line* 合并两个文件夹,其中短贷长投_资产负债表.dta为master,短贷长投_资产现金流量表.dta为usemerge 1:1 Stkcd year using "/Users/hahaha/Downloads/短贷长投_资产现金流量表.dta" //通过变量Stkcd和year一对一匹配合并* keep if _merge==3drop _merge
语法解析:
Stkcd year:匹配的关键变量(股票代码和年份)_merge:合并结果变量(1=仅master,2=仅using,3=匹配成功)
三、指标计算
1. 变量类型转换
ounter(linedestring Stkcd A001100000-C002200000,replace //将string(字符型)转化为数值型变量,变量Stkcd以及A001100000和C002200000之间的所有变量
语法解析:
A001100000-C002200000:变量范围,表示从A001100000到C002200000之间的所有变量
2. 计算短债长用
ounter(lineounter(linegen SDLA = A002100000/A002000000 - A001100000/A001000000label var SDLA "短债长用"
3. 面板数据设定
ounter(lineounter(lineegen stkid = group(Stkcd)xtset stkid year
语法解析:
group(Stkcd):按Stkcd生成组别编号xtset:设定面板数据,stkid为个体变量,year为时间变量
4. 计算长期贷款本期增加额
ounter(lineounter(linegen LDIncrement = A002201000 + A002125000 - l.A002125000label var LDIncrement "长期贷款本期增加额"
语法解析:
5. 计算所有者权益本期增加额
ounter(lineounter(linegen EIncrement = A003000000 - l.A003000000label var EIncrement "所有者权益本期增加额"
6. 计算短贷长投
ounter(lineounter(linegen SLLI = C002200000 - (LDIncrement + EIncrement + C001000000 + C002003000)label var SLLI "短贷长投"
7. 保留需要的变量并保存
ounter(lineounter(linekeep Stkcd ShortName year SDLA SLLIsave "/Users/hahaha/Downloads/短贷长投_SDLA_SLLI.dta",replace
实用技巧总结
- labone命令:处理Excel中合并单元格的利器
- substr+real:从日期字符串提取年份的技巧
- destring+变量范围:批量转换变量类型的效率技巧
注意事项
- 确保已安装labone命令(
ssc install labone)
参考B站up主:拿铁一定要加冰(「Stata」计算短债长用与短贷长投)本篇推文所用数据来自于国泰安数据库。