2007~2020 年上市公司碳排放数据(根据税调匹配结果估算)

今天给大家分享一份 2007~2020 年上市公司碳排放数据(根据税调匹配结果估算)。该数据通过将上市公司及其全资子公司与全国税收调查数据(税调)进行企业名称匹配,获取其能源消费信息后,采用排放因子法估算碳排放量。

该碳排放测算方法来自吴超鹏等(2025)发表于《中国工业经济》的论文《高管股权激励与企业碳排放:绿色发展背景下的企业激励机制研究》。论文原文中对碳排放测算方法的描述(第144页脚注②)如下:

本文的碳排放量指标参考现有文献(Lee et al., 2022; 周泽将等, 2022)的做法,根据全国税收调查数据中的企业用电量、煤炭、石油和天然气的消费量数据,利用排放系数法计算得到。

核心思路是:上市公司自身的能源消费数据通常不可直接获取,但通过将上市公司及其子公司与税调企业进行名称匹配,可以间接获得这些企业的能源消费数据,再利用各能源品种的碳排放系数计算出碳排放量。

排放系数

论文中使用的各能源品种碳排放系数如下:

能源品种 碳排放系数 消费量单位
电力 7.5 吨CO2/万千瓦时 万千瓦时
煤炭 1.89 吨CO2/吨 吨
石油 3.02 吨CO2/吨 吨
天然气 21.68 吨CO2/万标立方米 万标立方米

碳排放量的计算公式为:

其中 E 为各能源的消费量,α 为对应的碳排放系数。

数据处理流程

整个测算流程分为以下几个步骤:

  1. 读取税调企业能源消费数据(2007~2020 年各税调企业电力、煤炭、燃油、天然气消费量面板数据)
  2. 根据上述排放系数计算各税调企业的碳排放量(消费量 × 碳排放系数)
  3. 对税调企业层面的碳排放进行缩尾处理(1% 和 99% 分位数)
  4. 计算上市公司碳排放(母公司层面):将税调与上市公司匹配结果合并,按上市公司-年份汇总
  5. 筛选持股比例为 100% 的全资子公司:总持股比例 = 直接持股 + 间接持股,仅保留等于 100% 的子公司
  6. 计算全资子公司碳排放:将全资子公司与税调匹配后汇总
  7. 合并母公司和子公司碳排放数据,生成最终面板数据

关于全资子公司的筛选,论文中特别指出仅保留持股比例为 100% 的全资子公司,这是为了确保对子公司碳排放的归因准确性。

具体的处理过程可以参考下面三个课程:

数据概览

该数据为上市公司层面的碳排放面板数据(2007~2020 年),包含以下变量:

  • 股票代码:上市公司股票代码
  • 股票名称:上市公司股票名称
  • 年份:观测年份
  • total_carbon_emission_ton:总碳排放量:母公司+全资子公司(吨 CO2)
  • ln_carbon_emission:总碳排放量加 1 取自然对数
  • asinh_carbon_emission:总碳排放量的反双曲正弦变换
  • total_carbon_emission_ton_winsor:缩尾处理后的总碳排放量(吨 CO2)
  • ln_carbon_emission_winsor:缩尾后总碳排放量加 1 取自然对数
  • asinh_carbon_emission_winsor:缩尾后总碳排放量的反双曲正弦变换
  • parent_carbon_emission_ton:母公司层面碳排放量(吨 CO2)
  • carbon_emission_ton:税调匹配的母公司碳排放量(吨 CO2)
  • sub_carbon_emission_ton:全资子公司碳排放量(吨 CO2)
  • subsidiary_carbon_emission_ton:税调匹配的全资子公司碳排放量(吨 CO2)
  • 母公司各能源消费量(电力:万千瓦时;煤炭、石油:吨;天然气:万标立方米)
  • 全资子公司各能源消费量
  • n_matched_firms:母公司匹配到的税调企业数量
  • n_matched_subsidiaries:匹配到的全资子公司数量

数据预览如下:

图表展示

下图展示了各年平均碳排放量与样本量趋势:

下图展示了碳排放量对数分布的直方图:

下图展示了不同时期碳排放量的箱线图:

下图展示了母公司与子公司碳排放量的关系:

下图展示了各类能源消费量的堆叠面积图:

处理代码

下面展示使用 R 语言计算上市公司碳排放的核心代码:

#- 加载包
library(haven)
library(dplyr)
library(tidyr)
library(labelled)

#- 读取数据
energy_data <- read_dta("2007~2020年各税调企业电力、煤炭、燃油、天然气消费量面板数据.dta")
match_tax_listed <- read_dta("2007~2020年税调与上市公司匹配结果.dta")
match_tax_subsidiary <- read_dta("2007~2020年税调数据与上市公司子公司数据匹配结果.dta")

#- 定义排放系数
ELECTRICITY_EMISSION_FACTOR <- 7.5 # 电力:7.5 吨CO2/万千瓦时
COAL_EMISSION_FACTOR <- 1.89 # 煤炭:1.89 吨CO2/吨
OIL_EMISSION_FACTOR <- 3.02 # 石油:3.02 吨CO2/吨
GAS_EMISSION_FACTOR <- 21.68 # 天然气:21.68 吨CO2/万标立方米

#- 计算各税调企业的碳排放量
carbon_emission <- energy_data %>%
mutate(
electricity_co2 = `电力消费量_万千瓦时` * ELECTRICITY_EMISSION_FACTOR,
coal_co2 = `煤炭消费量_吨` * COAL_EMISSION_FACTOR,
oil_co2 = `油消费量_吨` * OIL_EMISSION_FACTOR,
gas_co2 = `天然气_万标立方米` * GAS_EMISSION_FACTOR,
total_co2_ton = coal_co2 + oil_co2 + gas_co2 + electricity_co2
)

#- 缩尾处理(1%和99%分位数)
carbon_emission <- carbon_emission %>%
mutate(
total_co2_ton_winsor = ifelse(
total_co2_ton < quantile(total_co2_ton, 0.01, na.rm = TRUE),
quantile(total_co2_ton, 0.01, na.rm = TRUE),
ifelse(
total_co2_ton > quantile(total_co2_ton, 0.99, na.rm = TRUE),
quantile(total_co2_ton, 0.99, na.rm = TRUE),
total_co2_ton
)
)
)

#- 筛选100%持股的全资子公司
match_tax_subsidiary_full <- match_tax_subsidiary %>%
mutate(
总持股 = ifelse(is.na(直接持股), 0, 直接持股) +
ifelse(is.na(间接持股), 0, 间接持股)
) %>%
filter(总持股 == 100)

#- 母公司碳排放汇总
listed_company_carbon <- match_tax_listed %>%
left_join(carbon_emission, by = "sdid") %>%
filter(!is.na(total_co2_ton)) %>%
group_by(股票代码, 股票名称, 年份) %>%
summarise(
carbon_emission_ton = sum(total_co2_ton, na.rm = TRUE),
.groups = "drop"
)

#- 全资子公司碳排放汇总
subsidiary_company_carbon <- match_tax_subsidiary_full %>%
left_join(carbon_emission, by = "sdid") %>%
filter(!is.na(total_co2_ton)) %>%
group_by(证券代码, 年份) %>%
summarise(
subsidiary_carbon_emission_ton = sum(total_co2_ton, na.rm = TRUE),
.groups = "drop"
)

#- 合并母公司和全资子公司碳排放
combined_carbon <- listed_company_carbon %>%
full_join(
subsidiary_company_carbon,
by = c("股票代码" = "证券代码", "年份" = "年份")
) %>%
mutate(
parent_carbon_emission_ton = ifelse(is.na(carbon_emission_ton), 0, carbon_emission_ton),
sub_carbon_emission_ton = ifelse(is.na(subsidiary_carbon_emission_ton), 0, subsidiary_carbon_emission_ton),
total_carbon_emission_ton = parent_carbon_emission_ton + sub_carbon_emission_ton,
ln_carbon_emission = log(total_carbon_emission_ton + 1),
asinh_carbon_emission = asinh(total_carbon_emission_ton)
)

#- 保存结果
write_dta(combined_carbon, "2007~2020年上市公司碳排放数据.dta")

附件中也提供了该数据的处理代码供参考:

数据引用格式

由于该数据包含较多 RStata 处理的内容,在研究中使用该数据请使用清晰的方式注明数据来源于 RStata 或者 RStata 数据中心,并使用如下格式引用:

RStata 数据中心: 2007~2020年上市公司碳排放数据(根据税调匹配结果估算). 2026. https://tidyfriday.cn/rsdb2/

英文文献可以使用下面的格式引用:

RStata Data Center: Carbon Emission Data of Listed Companies in China (Estimated from Tax Survey Matching Results), 2007–2020. 2026. https://tidyfriday.cn/rsdb2/

关联课程/数据推荐

使用 R 语言根据上市公司及其子公司与税调匹配结果测算碳排放:https://rstata.duanshu.com/#/brief/course/ea0800997ef64c9eb7b8f3fd0afc90bd

使用 Stata 根据上市公司及其子公司与税调匹配结果测算碳排放:https://rstata.duanshu.com/#/brief/course/5c429d45eec847feb0153d439f72108e

使用 Python 根据上市公司及其子公司与税调匹配结果测算碳排放:https://rstata.duanshu.com/#/brief/course/4f17013021be4a2d88a310ad6fbceb98

2007~2020 年税调与上市公司匹配结果:https://rstata.duanshu.com/#/course/e653ffbc045a46c098409df647415f9a

2007~2020 年税调数据与上市公司子公司数据匹配结果:https://rstata.duanshu.com/#/course/ce5b9892434f40bcb2e4062143d1b76f

点击这里跳转到 RStata 短书平台获取附件:2007~2020 年上市公司碳排放数据(根据税调匹配结果估算)

评论