名师讲堂|使用 Stata 筛选绿色进出口、统计各企业及各城市进出口及绿色进出口额与占比数据

注意:附件中的「统一HS编码」仅提供了 2000 年的数据,海关数据也由于过大也没有在附件中提供,全部年份的数据需要从下述链接购买复现。

今天给大家分享如何使用 Stata 基于逐条海关记录,筛选绿色进出口、统计各企业及各城市的进出口额与绿色进出口额,并计算绿色进出口占比(绿色进出口总额 ÷ 进出口总额 × 100%)的方法。数据基于「2000~2016 年海关数据(版本 2)」与平台分享的「2000~2016年海关数据 HS 编码(税号编码)统一对照表及统一结果」二次整理得到。

2000~2016 年海关数据(版本2):https://rstata.duanshu.com/#/brief/course/530c467967104ffe9aeb2c6cfabf9fa1

2000~2016年海关数据 HS 编码(税号编码)统一对照表及统一结果:https://rstata.duanshu.com/#/brief/course/e596b993c65646189696d21627e64fc8

处理流程概览:整个测算由 4 个 .do 文件串联完成,下表给出每一步对应的脚本与任务:

步骤 脚本 任务
Step 1 生成绿色HS6位清单.do 合并 table1.xlsx / table2.xlsx → 绿色HS6位清单.csv(155 个绿色 HS6 位码)
Step 2 绿色进出口测算_主程序.do 逐年读入海关数据,merge 统一 HS2017、筛选绿色进出口,并按企业 / 城市分类汇总
Step 3 合并多年数据.do 将逐年结果纵向 append 为 *_全部年份.dta
Step 4 绘图_*.do 生成总出口、绿色出口及占比趋势图

其中 table1.xlsx / table2.xlsx 来自之前的数据分享,是环境商品对应的海关 HS6 代码表:

使用 R 语言处理和提取绿色产品 HS6 代码:https://rstata.duanshu.com/#/brief/course/4dca1aac87394d52b235985351ed4fa9

数据来源说明:测算依赖五类数据——原始逐条海关记录、统一 HS 编码对照表、绿色 HS6 位清单、企业省市对照(全部海关企业所属省市.dta)、贸易方式大类(贸易方式大类.dta)、国别标准化(ISO3.dta)。其中企业省市对照的省市区县信息:2000~2011 年根据原始“经营单位所在市名称”汇总;2012~2016 年改用企业名称 + 工商注册信息匹配获取城市;省市区划代码使用 2021 版。

其中全部海关企业所属省市.dta、贸易方式大类.dta、ISO3.dta 三个数据来自之前分享的数据:

2000~2016 年各城市与各国家进出口额面板数据:https://rstata.duanshu.com/#/brief/course/0bf27cbbb2d841cdab4640fa7af59460

不过这个数据里面并没有这三个文件,因为它们只是整理过程中需要的中间文件,这里在附件中都提供了。


一、指标来源与计算原理

1.1 核心指标:进出口额、绿色进出口额与占比

指标 含义
进口额 进出口分类名称 == "进口" 时的金额
出口额 进出口分类名称 == "出口" 时的金额
进出口总额 进口额 + 出口额
绿色进口额 属于绿色产品且为进口的金额
绿色出口额 属于绿色产品且为出口的金额
绿色进出口总额 绿色进口额 + 绿色出口额
绿色进出口占比 绿色进出口总额 ÷ 进出口总额 × 100%
绿色出口占比(可派生) 绿色出口额 ÷ 出口额 × 100%

1.2 绿色进出口的筛选原理

“是否属于绿色进出口”由 HS 编码 + 绿色清单 判定:

  • 原始海关数据中每条记录通过 newhgid 在「统一 HS 编码」中对应到统一的 HS2017(8 位);
  • 取 HS2017 前 6 位,与 绿色HS6位清单.csv(2017 版绿色 HS6 位码,共 155 个)匹配;
  • 命中即记为绿色(green = 1),未命中为 green = 0。

注意:判定必须使用统一的 HS2017 前 6 位,不能用原始 商品编码(其 HS 版本随年变化),否则跨年不可比、漏判严重。

1.3 数据来源与口径

数据 角色
2000~2016 年海关数据(版本 2) 原始逐条记录,仅用 7 个核心变量
统一HS编码/(逐年 .dta) 通过 newhgid 取 HS2017
绿色HS6位清单.csv 绿色判定字典(155 个 HS6 位码)
贸易方式大类.dta 贸易方式名称 → 标准大类
全部海关企业所属省市.dta 经营单位名称 → 省 / 市
ISO3.dta 起运国 / 目的国名称 → 标准名 / ISO3

二、数据准备工作

2.1 Step 1:生成绿色 HS6 位清单

关键命令说明:

  • import excel …, firstrow:读取 Excel;ds + word 1 of r(varlist)’动态取首列,规避两张表首列变量名不一致(含空格)导致rename` 失败
  • destring …, force:将可能是字符的数字转数值
  • strofreal(raw, “%06.0f”):补齐前导零,统一为 6 位字符串
*- ── 0. 路径设置 ──
global projdir `"<项目绝对路径>"'
global tbl1 `"$projdir/table1.xlsx"'
global tbl2 `"$projdir/table2.xlsx"'
global outcsv `"$projdir/绿色HS6位清单.csv"'

*- ── 1. 读取 table1 的 HS Code(首列为 HS 6 位码)──
import excel using `"$tbl1"', firstrow clear
ds
local v1 : word 1 of `r(varlist)'
rename `v1' raw
keep raw
drop if missing(raw)
tempfile t1
save `t1'

*- ── 2. 读取 table2 的 HS subheading(6-digit),追加到 t1 ──
*- 此处代码需要下载讲义材料查看~

*- ── 3. 合并去重 + 格式化为 6 位字符串 ──
*- 此处代码需要下载讲义材料查看~

*- ── 4. 导出 CSV(含表头 hs6)──
export delimited `"$outcsv"', replace nolabel

去重与格式化规则说明:

  1. 两张表首列都取为 raw,缺失行先 drop;
  2. destring …, force 把字符型数字转为数值,避免后续匹配时报类型不一致;
  3. strofreal(raw, “%06.0f”) 补齐前导零,确保 hs6 严格 6 位(如 090111 而非 90111)。

2.2 Step 2a:准备三张辅助表(tempfile)

主程序逐年循环前,先把三张维度表读入内存并存为 tempfile,供后续 m:1 合并。

关键命令说明:

  • duplicates drop 合并键:保证合并键唯一,避免 m:1 合并时一对多导致记录膨胀
  • gen byte green = 1:在绿色清单上打命中标记
*- ── 读取绿色HS6位清单 ──
import delimited "$green6csv", clear stringcols(_all) varnames(1)
gen byte green = 1
tempfile green6
save `green6'

*- ── 读取贸易方式大类并去重 ──
use "$aux/贸易方式大类.dta", clear
duplicates drop 贸易方式名称, force
tempfile trade
save `trade'

*- ── 读取企业省市对照并去重,仅保留地理字段 ──
use "$aux/全部海关企业所属省市.dta", clear
duplicates drop 经营单位名称, force
keep 经营单位名称 省代码 省 市代码 市
tempfile geo
save `geo'

三、主程序逐年测算

以下代码对应 绿色进出口测算_主程序.do,在 foreach y of global years 循环内逐年执行。

3.1 逐年读入核心变量并防溢出

foreach y of global years {
*- 只读入 7 个核心变量,规避各年变量差异
use newhgid 年份 进出口分类名称 商品编码 金额 经营单位名称 贸易方式名称 ///
using "$hgdir/`y'.dta", clear
*- 金额统一为 double,防止 float/long 求和溢出
recast double 金额
*- 进出口标记
gen byte 出口 = (进出口分类名称 == "出口")
gen byte 进口 = (进出口分类名称 == "进口")

说明:只 keepusing 7 个核心变量,是应对“各年海关数据变量数量 / 类型不完全一致”的关键;recast double 金额 保证后续 collapse (sum) 不溢出。

3.2 绿色判定:newhgid → HS2017 → 前 6 位 → 绿色清单

*- 此处代码需要下载讲义材料查看~

说明:merge 1:1 newhgid 是“逐条对应”的统一编码桥梁;substr(HS2017,1,6) 取前 6 位与绿色清单对齐;第二次 merge m:1 hs6 后未命中的 green 为缺失,用 replace green = 0 补全。

3.3 生成分项金额并合并分类维度

*- 此处代码需要下载讲义材料查看~

说明:分项金额用 金额 * 出口 * green 这类乘法,把“是否出口 / 是否绿色”的 0-1 标记直接乘进金额;最后 merge m:1 经营单位名称 把企业归属到城市。

3.4 三类汇总输出

*- 此处代码需要下载讲义材料查看~

说明:三段 preserve ... restore 在同一循环内分别产出三类结果;企业层面 drop if 经营单位名称 == "" 剔除空企业名,城市层面 drop if missing(市代码) 剔除无法归属城市的记录;collapse (sum) 完成分组加总。


四、合并多年与结果可视化

4.1 合并多年数据

clear all
set more off
global out "<输出目录>"
if "$years" == "" global years "2000 2001 ... 2016"

local cats "绿色进出口明细 城市层面汇总 企业层面汇总"
foreach f of local cats {
local first 1
foreach y of global years {
capture confirm file "$out/`f'_`y'.dta"
if _rc continue
if `first' {
use "$out/`f'_`y'.dta", clear
local first 0
}
else append using "$out/`f'_`y'.dta"
}
capture sort 年份
save "$out/`f'_全部年份.dta", replace
}

说明:capture confirm file + if _rc continue 容忍某些年份文件缺失;首年 use 作基准,其余 append using 纵向拼接。

注意:逐年文件命名须遵循 *_YYYY.dta;缺少年份文件会被静默跳过,跑完请核对年份数量。

4.2 结果可视化

以全国总出口 vs 绿色出口的双轴折线图为例:

*- 此处代码需要下载讲义材料查看~

说明:先按年 collapse (sum) 得全国口径;金额 ÷1e4 换算万美元;占比指标(绿色出口占比、绿色进出口占比)在 collapse 之后用金额相除得到;twoway 用 yaxis(1)/yaxis(2) 实现双轴;graph export ..., width(4800) height(3000) 输出高清图。绘图_各企业历年平均出口.do 逻辑类似,只是先按“企业×年”汇总、再按年对企业求均值,得到“各企业平均”口径。

4.3 结果展示

下图由上述脚本生成:

点击这里跳转到 RStata 短书平台获取附件:名师讲堂|使用 Stata 筛选绿色进出口、统计各企业及各城市进出口及绿色进出口额与占比数据

评论