既有文献基本都是参照范子英和彭飞 (2017) 的文章,具体指标构建如下:

如果按照文章所写的指标直接去 CSMAR 检索的话,会发现有部分指标找不到。所以我们需要将其转换为能与 CSMAR 中财报术语直接匹配的命名方式。
以下是一些需要转换的财报术语:
| 转换前 | 转换后 |
| --- | --- |
| 少数股权收益 | 少数股东权益 |
| 销售额 | 营业总收入 |
| 税后净利润 | 净利润 |
| 预付款 | 预付款项净额 |
| 应付款 | 应付账款 |
| 存货 | 存货净额 |
假设我们已经下载好所需数据。
首先,我们处理资产负债表中的内容。我们从资产负债表中可以下载到以下变量:期初预付款、期末预付款,期末应付款、期初应付款,期末应付票据、期初应付票据,期初存货、期末存货,资产总计,负债合计,少数股东权益。
导入数据,仅保留期初和期末两期,再对部分变量进行期末减期初,或期初减期末。
- import excel using "FS_Combas.xlsx", firstrow clear
- labone, nrow(1 2)
- drop in 1/2
- keep if ustrregexm(Accper, "-01-01|-12-31")
- gen year = real(substr(Accper, 1, 4))
- keep if inrange(year, 2000, .)
- drop Typrep ShortName
- destring, replace
- for var A001112000 A002108000 A002107000 A001123000: gen X_beg = X if ustrregexm(Accper, "-01-01")
- for var A001112000 A002108000 A002107000 A001123000: gen X_end = X if ustrregexm(Accper, "-12-31")
- bys Stkcd year: fillmissing *_beg *_end
- keep if ustrregexm(Accper, "-12-31")
- gen prepaid = A001112000_beg - A001112000_end // 预付款
- gen payable = A002108000_end - A002108000_beg // 应付款
- gen notepay = A002107000_end - A002107000_beg // 应付票据
- gen invtory = A001123000_beg - A001123000_end // 存货
- drop *_beg *_end Accper A001112000 A002108000 A002107000 A001123000
- order Stkcd year
- xtset Stkcd year
- lab var prepaid "预付款"
- lab var payable "应付款"
- lab var notepay "应付票据"
- lab var invtory "存货"
- save "FS_Combas.dta", replace
接下来,捯饬一下其他所需变量,包括主营业务收入,非经常性损益,**扣除非经常性损益后的加权平均净资产收益率**,购买商品、接受劳务支付的现金,营业总收入,净利润,以及行业代码。
整理好基础数据后,将前面计算好的资产负债表数据合并进去,并进行简单整理。
- cap erase "raw.dta"
- foreach file in FS_Comins FS_Comscfd FI_T2 FAR_Finidx {
- import excel using "`file'.xlsx", firstro clear
- labone, nrow(1 2)
- drop in 1/2
- destring, replace
- cap gen year = real(substr(Accper, 1, 4))
- cap drop Typrep
- cap drop Accper
- cap drop ShortName
- order Stkcd year
- cap append using "raw.dta"
- save "raw.dta", replace
- }
- append using "FS_Combas.dta"
- keep if inrange(year, 2007, .)
- bys Stkcd year: fillmissing B110101 F020101-invtory
- bys Stkcd year: fillmissing Indcd
- bys Stkcd: fillmissing Indcd
- drop if Indcd == ""
- duplicates drop Stkcd year, force
- format Stkcd %06.0f
- xtset Stkcd year
接下来,计算采购额、增加值与净资产,采购商品的增值税率取 17 %。
- gen puramt = (C001014000 + prepaid + payable + notepay) / (1 + 0.17) + invtory
- gen incval = B001100000 - puramt
- gen netasset = A001000000 - A002000000 + A003200000
计算净资产收益率和行业平均净资产收益率:
- gen roa = (B002000000 - F020101) / A001000000
- bys Indcd year: egen roaavg = mean(roa)
也有文献是取行业净资产收益率的三年移动平均,算法如下:
- gen roa = (B002000000 - F020101) / A001000000
- rangestat roa, by(IndustryCode) interval(year -2 0)
最后,计算专业化和纵向一体化,仅保留值域在 [0,1] 之间的样本,并做缩尾处理。
- gen VAS = (incval - B002000000 + netasset * roaavg) / (B110101 - B002000000 + netasset * roaavg)
- gen VSI = 1 - VAS
- for var VAS VSI: keep if inrange(X, 0, 1)
- winsor2 VAS VSI, replace
看一下描述性统计
- . sum VAS VSI
- Variable | Obs Mean Std. dev. Min Max
- -------------+---------------------------------------------------------
- VAS | 35,233 .4319804 .2061121 .0403902 .9424814
- VSI | 35,233 .5680196 .2061121 .0575186 .9596098
由于范老师的文章并没有汇报描述性统计,我们将这一数值与袁淳等 (2021) 的文章进行对比。

同样地,我们将样本限定在 2010-2018 年的非金融企业:
- drop if ustrregexm(Indcd, "J")
- keep if inrange(year, 2010, 2018)
- sum VAS VSI
- Variable | Obs Mean Std. dev. Min Max
- -------------+---------------------------------------------------------
- VAS | 19,431 .4362895 .2094738 .0403902 .9424814
- VSI | 19,431 .5637105 .2094738 .0575186 .9596098
这一数值比袁淳老师的结果略大。
后面无意中发现,CSMAR 中有现成的扣除非经常性损益后的加权平均净资产收益率。用这一变量替换前述的净资产收益率,重新计算行业平均净资产收益率:
- gen roa = F020104 / 100
- bys Indcd year: egen roaavg = mean(roa)
随后,重新计算专业化与纵向一体化,并将样本限定在 2010-2018 年的非金融企业:
- . sum VAS VSI
- Variable | Obs Mean Std. dev. Min Max
- -------------+---------------------------------------------------------
- VAS | 19,253 .4515213 .2202221 .0349814 .977461
- VSI | 19,253 .5484787 .2202221 .022539 .9650186
此时的结果与袁淳老师的高度一致,我们的均值为 0.5485,袁老师的均值为 0.5487。所以,我们的计算结果还是较为可信的。
最后,提供上述计算过程的所有原始数据、结果数据和其间用到的代码:
上市公司2007-2023年专业化/一体化数据
(84 Bytes, 需要: RMB 48 元)


雷达卡





京公网安备 11010802022788号







