文章利用中国各地级市公共数据开放平台上线的准自然实验,基于2003-2019年城投债券的发行数据,采用双重差分模型检验公共数据开放对城投债利差的影响。
地方政府的财政实力、地区经济发展水平通常是城投债投资者重点关注的因素。城投企业上市比例不高,受限于较低的信息披露要求,投资者获取企业的财务情况、管理队伍和业务风险等信息的成本较高。因此,相关方的信息披露对城投债定价有一定影响,而公共数据平台向社会公众无偿开放大规模公共数据的行为营造了更好的信息环,可提高与城投企业相关的信息透明度,可能降低债券定价过程中市场摩擦带来的效率损失。公共数据开放作为政府推动数字基础设施建设的重要举措,其大数据可辅助政府和企业的决策,提升全要素生产率。因此,公共数据开放可能作用于城投企业的偿债能力,降低城投债的潜在信用风险。基于以上分析提出如下假说:
文章基于经典的债券定价理论,分别从信息成本和信用风险降低两个方面展开机制分析。
信息不对称与企业借贷成本密切关联。城投企业上市比例较低,投资者信息获取成本较高。政府推动公共数据开放实现了信息发布的集约化,信息需求方不必再从不同的政府部门网站获取信息,这降低了信息的搜集成本。因此提出如下假说:
城投债的投资方以机构投资者为主,一般具有强大的数据分析能力,可以利用公共数据开放平台提供的大数据,结合自身开发的算法和模型识别信用风险。数字化手段能提升风险管理精准化水平,强化风险研判与预测预警能力,辅助监督企业管理层降低道德风险,使企业信用风险下降。类似地,数据可赋能城投企业进行更高效的投资决策,提升其偿债能力,相应地会带来城投债信用风险的降低。基于以上分析提出如下假说:
自2012年北京和上海市政府推动公共数据开放平台试点以来,截至2022年末,中国已有省市级共208个公共数据开放平台。
文章所用公共数据开放平台上线时间来源于复旦大学数字与移动治理实验室发布的《中国地方政府数据开放报告》,借助站长工具与百度新闻搜索引擎对数据进行交叉验证。城投债的样本区间为2003-2019年,发行和交易数据来源于万得(Wind)数据库。各地级市的经济数据来源于《中国城市统计年鉴》。
以百分数表示,以债券发行利率减去同一天相同期限的国开债利率得到。
若某城市某年存在公共数据开放平台则取值为1,否则为0。
债券层面控制变量包含债券发行期限(term)、债券发行规模(amt)、债券是否有担保(scrt)以及债券是否含权(op);城投企业控制变量包含公司总资产(asst)、资产收益率(roa)、主营业务收入(sale)、杠杆率(lev)、现金短融比(cash)以及是否上市(list);地级市控制变量包含人均地区生产总值(gdp)、第三产业产值占地区生产总值的比重(ter)以及财政赤字率(dfct)。变量的名称和定义方式见表1
图1展示了在不控制其他变量的情况下,利差的时间变化趋势。中期票据、企业债和公司债是城投债主要的券种,本文将债券分为上述三类,按照发行规模对利差加权作图。将公共数据开放平台上线年份设为第0年,上线后的第一年取1,以此类推。由图1可见,三类债券的利差在公共数据开放平台上线后均发生了显著的降低。初步论证了假设。
****************************************************统计********************************************************
*平台上线和城投债利差(分种类)
use 公共数据开放与城投.dta,clear
collapse (mean) spd amty [weight=amty], by(typebond contyear)
drop if contyear <-5 | contyear > 5
#delimit ;
twoway
line spd contyear if typebond==1, yaxis(1) ytitle("利差平均(%)",place(middle) axis(1)) lpattern(solid) lcolor(black) ylabel(, nogrid) ||
line spd contyear if typebond==2, yaxis(1) ytitle("利差平均(%)",place(middle) axis(1)) lpattern(dash) lcolor(black) ||
line spd contyear if typebond==3, yaxis(1) ytitle("利差平均(%)",place(middle) axis(1)) xlabel(-5(2)5) lcolor(black) lpattern(longdash)
xline(0, lpattern(longdash) lwidth(thin) lcolor(gray))
xtitle("上线期限(年)",place(top))
legend(label (1 "中期票据") label (2 "企业债") label (3 "公司债") rows(3) position(1) ring(0))
graphregion(fcolor(white))
plotregion(ifcolor(white));
#delimit cr
*描述性统计
use 公共数据开放与城投.dta,clear
global control term amt scrt op asst roa sale lev cash list gdp ter dfct
sum2docx dp spd $control if dp != . using "统计表格.docx",
append stats (N mean(%9.4f) sd(%9.4f)) title("表2: 描述性统计")
sum2docx spd $control if dp == 1 using "统计表格.docx" ,
append stats (N mean(%9.4f)) title("表2A: 描述性统计1")
sum2docx spd $control if dp == 0 using "统计表格.docx" ,
append stats (N mean(%9.4f)) title("表2B: 描述性统计0")
ttable2 spd $control ratingdum, by(dp) format(%9.4g)
表3中,
dp变量的回归系数均显著为负
。在控制变量和固定效应最严格的第(5)列中,回归系数为-0.1154,这意味着公共数据开放使城投债利差平均降低了11.5个基点。
**基准回归
use 公共数据开放与城投.dta,clear
global control term amt scrt op asst roa sale lev cash list gdp ter dfct
vce2way reg spd dp , cluster(inddum citydum)
est store d1
vce2way reg spd dp $control, cluster(inddum citydum)
est store d2
reghdfe spd dp $control, absorb(i.provincedum##i.yeardum) cluster(inddum citydum) keepsing
est store d3
reghdfe spd dp $control, absorb(i.provincedum##i.yeardum i.inddum##i.yeardum) cluster(inddum citydum) keepsing
est store d4
reghdfe spd dp $control, absorb(i.provincedum##i.yeardum i.inddum##i.yeardum faxingdum ratingdum leixingdum shangshidum fangshidum) cluster(citydum inddum) keepsing
est store d5
reg2docx
d1 d2 d3 d4 d5 using "统计表格.docx", append ///
scalars(N r2_a(%9.4f)) b(%9.4f) t(%7.4f) ///
order(dp $control) ///
title("表3:" 基准回归)
//provincedum 省份固定效应;yeardum 年份固定效应;inddum 行业固定效应;faxingdum 发行人固定效应;ratingdum 评级固定效应;leixingdum 债券类型固定效应;shangshidum 上市地点固定效应;fangshidum 发行方式固定效应;citydun 城市固定效应;jibiedum 平台行政级别固定效应
选择公共数据开放平台上线前一年为基准期,更换不同的控制变量和固定效应进行平行趋势检验,结果如表4所示。城投债风险变化符合平行趋势假设,并且公共数据开放使城投债风险显著下降。
**平行趋势
use 公共数据开放与城投.dta,clear
global control term amt scrt op asst roa sale lev cash list gdp ter dfct
reghdfe spd pre* shk post* $control, absorb(i.provincedum##i.yeardum i.inddum##i.yeardum) cluster(citydum inddum) keepsing
est store d1
reghdfe spd pre* shk post* $control, absorb(i.provincedum##i.yeardum i.inddum##i.yeardum ratingdum leixingdum shangshidum fangshidum) cluster(citydum inddum) keepsing
est store d2
reghdfe spd pre* shk post* $control, absorb(i.provincedum##i.yeardum i.inddum##i.yeardum faxingdum ratingdum leixingdum shangshidum fangshidum) cluster(citydum inddum) keepsing
est store d3
reg2docx d1 d2 d3 using "统计表格.docx", append
scalars(N r2_a(%9.4f)) b(%9.4f) t(%7.4f)
order(pre6 pre5 pre4 pre3 pre2 shk post1 post2 post3 post4 post5 $control)
title("表4:" 城投债定价的平行趋势检验)
包括:安慰剂检验;倾向性得分匹配;更改样本和模型(第一,在回归中将短融或超短融债券加回;第二,将平台属性固定效应加入回归;第三,加入城市固定效应;第四,加入财政压力、政府治理水平和营商环境变量控制相关因素的影响;第五,采用固定效应交错(多期)双重差分模型;将省级公共数据平台的建立作为准自然实验,以省级城投企业发行的城投债为样本,进行与基准回归相似的双重差分检验;将发债平台的变量在城市层面取平均,最后加入城市层面控制变量进行检验);排除其他外生事件干扰(2008年次贷危机,2015年中国人民银行决定放开金融机构存款利率上下限,国在2016-2017年经历了房地产价格的普遍上涨,排除营改增政策、《关于加强地方政府性债务管理的意见》(43号文),以及《中华人民共和国预算法》修订等政策和法规的冲击);工具变量(采用历年地级市政府工作报告中的数字经济词频,经生产总值标准化后与1984年邮电业务总量交互得到工具变量)。
**安慰剂
use 安慰剂检验.dta,clear
#delimit ;
twoway
scatter pvalue coef, yline(0.1, lwidth(0.2) lp(shortdash) lcolor(black)) yaxis(1) ytitle("P值",place(middle) axis(1)) msymbol(smcircle_hollow) mcolor(black) legend(off) ylabel(, nogrid format(%3.1f)) ||
kdensity coef, yaxis(2) ytitle("系数核密度分布",place(middle) axis(2)) lcolor(black)
graphregion(color(white)) xlabel(-0.4(0.1)0.4, nogrid format(%3.1f))
xline(0 -0.1154, lwidth(0.2) lp(shortdash) lcolor(black))
xtitle("估计系数")
legend(label (1 "P值") label (2 "核密度分布") rows(3) position(1) ring(0));
#delimit cr
**PSM-DID
use PSM-DID.dta,clear
global control term amt scrt op asst roa sale lev cash list gdp ter dfct
reghdfe spd dp $control, absorb(i.provincedum##i.yeardum i.inddum##i.yeardum faxingdum ratingdum leixingdum shangshidum fangshidum) cluster(inddum citydum) keepsing
est store d1
reg2docx d1 using "统计表格.docx", append
scalars(N r2_a(%9.4f)) b(%9.4f) t(%7.4f)
order(dp $control)
title("表5:" PSM-DID)
**加超短融
use 加入短融超短融.dta,clear
global control term amt scrt op asst roa sale lev cash list gdp ter dfct
reghdfe spd dp $control, absorb(i.provincedum##i.yeardum i.inddum##i.yeardum faxingdum ratingdum leixingdum shangshidum fangshidum) cluster(inddum citydum) keepsing
est store d1
reg2docx d1 using "统计表格.docx", append
scalars(N r2_a(%9.4f)) b(%9.4f) t(%7.4f)
order(dp $control)
title("表5" 加超短融)
**加入平台行政级别fe/城市fe
use 公共数据开放与城投.dta,clear
global control term amt scrt op asst roa sale lev cash list gdp ter dfct
reghdfe spd dp $control, absorb(i.provincedum##i.yeardum i.inddum##i.yeardum faxingdum ratingdum leixingdum shangshidum fangshidum jibiedum) cluster(inddum citydum) keepsing
est store d1
reghdfe spd dp $control, absorb(i.provincedum##i.yeardum i.inddum##i.yeardum citydum faxingdum ratingdum leixingdum shangshidum fangshidum) cluster(inddum citydum) keepsing
est store d2
reg2docx d1 d2 using "统计表格.docx", append
scalars(N r2_a(%9.4f)) b(%9.4f) t(%7.4f)
order(dp $control)
title("表5:" 加入平台行政级别fe/城市fe)
**加入财政压力和营商环境控制
use 公共数据开放与城投.dta,clear
global control term amt scrt op asst roa sale lev cash list gdp ter dfct
reghdfe spd dp $control 财政压力 治理能力 营商环境, absorb(i.provincedum##i.yeardum i.inddum##i.yeardum faxingdum ratingdum leixingdum shangshidum fangshidum) cluster(inddum citydum) keepsing
est store d1
reg2docx d1 using "统计表格.docx", append
scalars(N r2_a(%9.4f)) b(%9.4f) t(%7.4f)
order(dp $control)
title("表5:" 加入额外控制变量)
**DIDM
use 公共数据开放与城投.dta,clear
global control term amt scrt op asst roa sale lev cash list gdp ter dfct
did_imputation spd citydum year uptime, autosample fe(py iy ratingdum leixingdum shangshidum fangshidum faxingdum) controls($control) tol(500)
est store d1
reg2docx d1 using "统计表格.docx", append
scalars(N r2_a(%9.4f)) b(%9.4f) t(%7.4f)
order(tau)
title("表5:" DIDM)
**省级平台
use 公共数据开放与城投-省级.dta,clear
global control term amt scrt op asst roa sale lev cash list gdp ter dfct
reghdfe spd dp $control, absorb(i.inddum##i.yeardum faxingdum ratingdum leixingdum shangshidum) cluster(inddum provincedum) keepsing
est store d1
reg2docx d1 using "统计表格.docx", append
scalars(N r2_a(%9.4f)) b(%9.4f) t(%7.4f)
order(dp $control)
title("表5:" 省份公共数据开放与省份平台)
***城市基准回归
use 公共数据开放与城投-地级市.dta,clear
global control asst roa sale lev gdp ter dfct amt
reg spd dp $control , cluster(citydum)
est store d1
reghdfe spd dp $control , absorb(citydum yeardum) cluster(citydum) keepsing
est store d2
reghdfe spd dp $control , absorb(i.provincedum##i.yeardum citydum) cluster(citydum) keepsing
est store d3
reg2docx d1 d2 d3 using "统计表格.docx", append
scalars(N r2_a(%9.4f)) b(%9.4f) t(%7.4f)
order(dp $control)
title("表5:" 城市基准回归)
**排除08年金融危机
use 公共数据开放与城投.dta,clear
drop if year == 6
global control term amt scrt op asst roa sale lev cash list gdp ter dfct
reghdfe spd dp $control, absorb(i.provincedum##i.yeardum i.inddum##i.yeardum faxingdum ratingdum leixingdum shangshidum fangshidum) cluster(inddum citydum) keepsing
est store d1
reg2docx d1 using "统计表格.docx", append
scalars(N r2_a(%9.4f)) b(%9.4f) t(%7.4f)
order(dp $control)
title("表6:" 排除金融危机)
*排除15年股灾
use 公共数据开放与城投.dta,clear
drop if year == 13
global control term amt scrt op asst roa sale lev cash list gdp ter dfct
reghdfe spd dp $control, absorb(i.provincedum##i.yeardum i.inddum##i.yeardum faxingdum ratingdum leixingdum shangshidum fangshidum) cluster(inddum citydum) keepsing
est store d1
reg2docx d1 using "统计表格.docx", append
scalars(N r2_a(%9.4f)) b(%9.4f) t(%7.4f)
order(dp $control)
title("表6:" 排除利率市场化影响)
*排除16-17年房价增加
use 公共数据开放与城投.dta,clear
drop if year == 14 | year == 15
global control term amt scrt op asst roa sale lev cash list gdp ter dfct
reghdfe spd dp $control, absorb(i.provincedum##i.yeardum i.inddum##i.yeardum faxingdum ratingdum leixingdum shangshidum fangshidum) cluster(inddum citydum) keepsing
est store d1
reg2docx d1 using "统计表格.docx", append
scalars(N r2_a(%9.4f)) b(%9.4f) t(%7.4f)
order(dp $control)
title("表6:" 排除房价影响)
*将上面年份都删了
use 公共数据开放与城投.dta,clear
drop if year == 6 | year == 13 | year == 14 | year == 15
global control term amt scrt op asst roa sale lev cash list gdp ter dfct
reghdfe spd dp $control, absorb(i.provincedum##i.yeardum i.inddum##i.yeardum faxingdum ratingdum leixingdum shangshidum fangshidum) cluster(inddum citydum) keepsing
est store d1
reg2docx d1 using "统计表格.docx", append
scalars(N r2_a(%9.4f)) b(%9.4f) t(%7.4f)
order(dp $control)
title("表6:" 一并排除)
*IV
use 公共数据开放与城投.dta,clear
global control term amt scrt op asst roa sale lev cash list gdp ter dfct
reghdfe dp iv $control, absorb(i.provincedum##i.yeardum i.inddum##i.yeardum faxingdum ratingdum leixingdum shangshidum fangshidum) cluster(inddum citydum)
est store d1
ivreghdfe spd $control (dp=iv), absorb(i.provincedum##i.yeardum i.inddum##i.yeardum faxingdum ratingdum leixingdum shangshidum fangshidum) cluster(inddum citydum)
est store d2
reghdfe spd dp iv $control, absorb(i.provincedum##i.yeardum i.inddum##i.yeardum faxingdum ratingdum leixingdum shangshidum fangshidum) cluster(inddum citydum)
est store d3
reg2docx d1 d2 d3 using "统计表格.docx", append
scalars(N r2_a(%9.4f)) b(%9.4f) t(%7.4f)
order(iv dp $control)
title("表7:" 2SLS)
构建城投债二级市场成交金额(tnv)、二级市场成交量(vol)和非流动性比率(ami)变量作为信息不对称的度量方式。其中,
tnv、vol与流动性成正比,ami与流动性成反比,流动性越低代表信息不对称程度越高
。将其作为被解释变量进行检验,结果如表8第(1)至(3)列所示,
公共数据开放增加了城投债的流动性,当地城投债的信息搜集成本降低
。
对流动性指标(tnv、vol、ami的相反数)提取主成分,以捕捉它们的共同变异信息,即与信息相关的部分,再取相反数代表信息不对称。从主成分分析结果看,第一主成分的特征值大于1,且方差累计贡献率为66.69%,说明第一主成分包含了原始指标的主要信息,能代表城投债与投资者的信息不对称。将第一主成分记为cost,作为被解释变量进行回归,结果如表8第(4)列所示,
信息不对称程度减弱
。
接下来从新闻媒体发达程度、财务报表质量等维度来衡量信息搜集成本大小。采用省级媒体报纸数(num)和报纸总印数(prt)作为信息搜集成本的代理变量进行检验,并用当地人口数标准化,将其与dp进行交互。回归结果如表9第(1)和(2)列所示,
交互项系数均显著为正,这意味着对报纸发行量较低
,即媒体报道不足的地区,公共数据开放对城投债具有更强的降低风险作用。较高的应计盈余表示企业存在较多的盈余管理行为,财务报表的信息质量较差,投资者需要花费更多的成本对企业信息进行验证。财务报表质量用修正Jones模型估计的应计盈余绝对值(dacc)衡量。将dacc与公共数据开放平台变量交互进行回归,结果如表9第(3)列所示,
公共数据开放所带来的信息增益在信息搜集成本较高的企业中更强
。结论支持假说H2。
偿债能力方面,采用流动比率(crt)反映公司短期内可以调用的资源是否足以偿还债务,采用获息倍数(rn,息税前利润总额/利息支出)反映长时间内企业保障债务偿还的能力。表10第(1)和(2)列的回归结果显示,
公共数据开放显著提升城投企业的流动比率和获息倍数,这反映城投企业的长短期偿债压力均有所下降
。
运营绩效方面,采用收入利润率(prf,ln(净利润/主营业务收入))衡量盈利能力。用营业收入增长率、杠杆率、现金持有、企业资产规模、投资额等变量估计基本投资方程,估计残差为无效投资,用估计的投资额对其标准化得到投资效率(ie)。表10第(3)列
系数显著为正
,说明公共数据开放后,当地城投企业的利润率上升,运营绩效提升。第(4)列
系数为负
,表明公共数据开放后城投企业的无效投资下降。上述结果说明城投企业经营和投资绩效均有所改善。
良好的外部监督有利于改善经营和投资绩效,从而降低信用风险。文章用社会资本持股比例、债券募集用途、债券发行审计公司、机构投资者持有债券来度量城投企业的外部监督水平。
第一,社会资本持股比例。选取第三至五大股东持股比例(shhd)作为外部监督的代理变量。回归结果如表11第(1)列所示。
社会资本持股比例越低,公共数据开放带来的外部监督改善效果越强,城投债信用风险下降越大
。
第二,债券募集用途。对募集说明书进行文本分析,根据募集用途将债券分为投资建设类和其他类,设定虚拟变量con来表示(投资建设类取值为1,否则为0)。结果如表11第(2)列所示,
募集用途为非建设类时,利益主体更需要公共数据进行外部监督,公共数据对城投债风险的降低作用更强
。
第三,债券发行是否由德勤、普华永道、毕马威、安永四大会计事务所审计。定义变量acc,当债券发行审计的会计师事务所属于四大会计事务所则取1,否则取0,将其与公共数据开放变量交互后进行检验,结果如表11第(3)列所示。
第四,机构投资者持有债券。用债券发行当年末持有该债券的基金个数(fund)作为外部监督水平的代理变量,将其与公共数据开放变量交互后进行检验,结果如表11第(4)列所示。
后两列交互项回归系数亦显著为正,说明公共数据开放对外部监督水平较低的债券有更强的风险降低作用
。
综上,公共数据开放降低了城投债的信用风险,从而降低发行价差,结论支持假说H3。
除上述经济机制外,基准回归中观察到的现象可能受到挤出效应的影响。取建立公共数据平台的城市样本,以平均利差中位数进行分组,将高风险组城投企业作为处理组,低风险组城投企业作为控制组,以公共数据开放平台上线作为冲击,在公司-年水平上进行双重差分回归。结果如表12的Panel A所示。由第(1)(2)列的回归系数可知,
高风险组与低风险组城投企业在债券发行总规模(amt)上不存在差异
,这说明并不存在投资者选择现象。将被解释变量替换为企业层面的加权利差,回归系数仍不显著。最后比较组间差异,结果如表12的Panel B所示,高风险和低风险处理组系数为负,且在加入全部固定效应后,
其系数差异较小(第(2)列和第(4)列)。这说明他们确实受到了相似的处理效应,一定程度上排除了挤出效应
。
***********************************机制部分*************************************
*****信息
**用二级市场计算信息不对称
use 城投二级交易.dta,clear
global control term amt scrt op asst roa sale lev cash list gdp ter dfct
reghdfe tnv dp $control, absorb(i.provincedum##i.yeardum i.inddum##i.yeardum faxingdum ratingdum leixingdum shangshidum fangshidum) cluster(inddum citydum) keepsing
est store d1
reghdfe vol dp $control, absorb(i.provincedum##i.yeardum i.inddum##i.yeardum faxingdum ratingdum leixingdum shangshidum fangshidum) cluster(inddum citydum) keepsing
est store d2
reghdfe ami dp $control , absorb(i.provincedum##i.yeardum i.inddum##i.yeardum faxingdum ratingdum leixingdum shangshidum fangshidum) cluster(inddum citydum) keepsing
est store d3
reg2docx d1 d2 d3 using "统计表格.docx", append
scalars(N r2_a(%9.4f)) b(%9.4f) t(%7.4f)
order(dp)
title("表8:" 二级市场交易)
**PAC
use 城投二级交易.dta,clear
global control term amt scrt op asst roa sale lev cash list gdp ter dfct
reghdfe cost dp $control, absorb(i.provincedum##i.yeardum i.inddum##i.yeardum faxingdum ratingdum leixingdum shangshidum fangshidum) cluster(inddum citydum) keepsing
est store d1
reg2docx d1 using "统计表格.docx", append
scalars(N r2_a(%9.4f)) b(%9.4f) t(%7.4f)
order(dp)
title("表8:" 二级市场交易-pac结果)
**媒体报纸
use 公共数据开放与城投.dta,clear
global control term amt scrt op asst roa sale lev cash list gdp ter dfct
reghdfe spd i.dp##c.num i.treat##c.num $control, absorb(i.provincedum##i.yeardum i.inddum##i.yeardum faxingdum ratingdum leixingdum shangshidum fangshidum) cluster(inddum citydum) keepsing
est store d1
reghdfe spd i.dp##c.prt i.treat##c.prt $control, absorb(i.provincedum##i.yeardum i.inddum##i.yeardum faxingdum ratingdum leixingdum shangshidum fangshidum) cluster(inddum citydum) keepsing
est store d2
reg2docx d1 d2 using "统计表格.docx", append
scalars(N r2_a(%9.4f)) b(%9.4f) t(%7.4f)
order(1.dp#c.num 1.dp#c.prt)
title("表9:" 媒体)
**盈余管理
use 公共数据开放与城投.dta,clear
global control term amt scrt op asst roa sale lev cash list gdp ter dfct
reghdfe spd i.dp##c.dacc i.treat##c.dacc $control, absorb(i.provincedum##i.yeardum i.inddum##i.yeardum faxingdum ratingdum leixingdum shangshidum fangshidum) cluster(inddum citydum) keepsing
est store d1
reg2docx d1 using "统计表格.docx", append
scalars(N r2_a(%9.4f)) b(%9.4f) t(%7.4f)
order( 1.dp#c.dacc)
title("表9:" 盈余质量)
*******信用
**杠杆
use 公共数据开放与城投-平台.dta, clear
global control bala amt asst roa dfct ter gdp
reghdfe crt dp $control, absorb(i.provincedum##i.yeardum citydum i.inddum##i.yeardum ) cluster(inddum citydum) keepsing
est store d1
reghdfe rn dp $control, absorb(i.provincedum##i.yeardum citydum i.inddum##i.yeardum ) cluster(inddum citydum) keepsing
est store d2
reg2docx d1 d2 using "统计表格.docx", append