2000~2016 年海关与专利数据匹配结果(版本2)

最近有不少小伙伴反馈希望推出 海关 和 专利 匹配的结果数据,这不就更新来啦(版本 2)!

也就是把版本2的海关数据和版本3的专利数据匹配:

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

1985~2024 年专利申请与授权数据(版本 3,含申请人所处的省市区县):https://rstata.duanshu.com/#/brief/course/2397451274c546d3a36e156ffc865988

今天给大家分享一份 2000~2016 年海关与专利数据匹配结果(版本2)。由 RStata 数据中心处理得到(基于 2000~2016 年海关数据(版本2)与国家知识产权局专利数据,经企业名称匹配得到)。

实际之前给大家分享了不少关于专利的匹配结果,以及不少关于海关数据的匹配结果。关于数据是如何匹配的,可以参考下面的课程:

使用 Stata 进行税调专利匹配:超高效的匹配流程:https://rstata.duanshu.com/#/brief/course/43fd5249e06c462a95c499b2c646046d

如何匹配中国工业企业数据库和海关数据库?以 2013 年为例:https://rstata.duanshu.com/#/course/5463b8d7afcb438ca1e537fa76c1a45d

数据概览

为了方便大家使用,我把匹配结果汇总成了分年的面板数据,每年一份 dta 文件,保存在 海关与专利数据库匹配结果/ 文件夹中(data_2000.dta ~ data_2016.dta,共 17 个文件)。每行观测值是一条专利,包含该专利对应的海关经营单位名称、newipzlid、年份、匹配方式以及专利的全部变量。

在统计专利数量时需要注意,专利数据里面存在申请和授权同时存在的重复情况,应先去除重复:

*- 去除公开公告号尾部的 A/B/U/S(A 发明专利申请公开,B 发明专利授权公告,U 实用新型授权公告,S 外观设计授权公告)
replace 公开公告号 = ustrregexs(1) if ustrregexm(公开公告号, "(.*)[A-Z]$")
*- 去除重复专利(按 年份 经营单位名称 公开公告号 / 申请号)
duplicates drop 年份 经营单位名称 公开公告号, force
duplicates drop 年份 经营单位名称 申请号, force
replace 专利类型 = "发明" if index(专利类型, "发明")

下图展示了 2000~2016 年各年的匹配专利总量以及发明、实用新型、外观设计三种类型的数量:

图表展示

上图(标题图片)由 code/plot.do 绘制,展示了 2000~2016 年海关与专利数据库匹配结果中的专利数量,包含总数量(柱状)与各类专利(实用新型、外观设计、发明)的数量趋势(样条曲线)。可以看到匹配到的专利数量随年份快速增长。

处理代码

下面简要说明这份数据的处理流程(完整代码见 code/ 文件夹中的 match_customs_patent.R、plot.do、split_by_var.ado)。

匹配的核心思路是通过企业身份标识把海关经营单位与专利申请人关联起来,具体分三步:

1. 准备海关企业列表并补全工商身份信息。 逐年读取海关分年 dta,提取每年互不相同的 经营单位名称,并左连《2000~2016年海关数据企业工商注册信息匹配结果.dta》,补全 企业名称、曾用名、工商注册号、统一社会信用代码:

2000~2016 年海关数据与工商注册信息匹配结果(版本2):https://rstata.duanshu.com/#/brief/course/fe61acdee53d4000bb4b80ec0afbfff4

# 1. 载入工商注册信息匹配结果(按 经营单位名称 唯一键)
mi <- read_dta(MATCHINFO,
col_select = c("经营单位名称", "企业名称", "曾用名",
"工商注册号", "统一社会信用代码"))
setDT(mi)
mi[, 经营单位名称 := trimws(as.character(经营单位名称))]
mi <- unique(mi, by = "经营单位名称")

# 2. 逐年提取互不相同的经营单位名称
nm <- read_dta(cus_path, col_select = c("经营单位名称"))
setDT(nm)
nm[, 经营单位名称 := trimws(as.character(经营单位名称))]
nm <- unique(nm, by = "经营单位名称")

# 3. 左连工商注册信息,补全企业名称/曾用名/工商注册号/信用代码
nm[mi, `:=`(企业名称 = i.企业名称, 曾用名 = i.曾用名,
工商注册号 = i.工商注册号, 统一社会信用代码 = i.统一社会信用代码),
on = c("经营单位名称" = "经营单位名称")]

2. 生成清洗后的企业名称 z 并做三种方式匹配。 对 经营单位名称、企业名称、曾用名 三个来源分别生成清洗名称 z(剔除”股份有限/集团有限/有限责任/有限公司/有限/责任/股份/公司/厂/省/市/区/县”等干扰字符),并分别用 z(企业名称)、工商注册号、统一社会信用代码 三种方式匹配当年的专利数据:

# 复刻 create_clean_company_name.R:由企业名称生成 z(剔除干扰字符)
create_z <- function(name) {
z <- as.character(name)
patterns_to_remove <- c(
"股份有限", "集团有限", "有限责任", "有限公司", "有限",
"责任", "股份", "公司", "厂", " ", "(集团)", "(集团)",
"(", ")", "(", ")", "回族自治区", "壮族自治区",
"维吾尔自治区", "自治区", "省", "市", "区", "县")
for (pattern in patterns_to_remove) {
z <- gsub(pattern, "", z, fixed = TRUE)
}
z
}

匹配方式字段 匹配方式 会标记每条记录是通过”企业名称””工商注册号”还是”统一社会信用代码”匹配得到的。三种方式的匹配结果合并后按 经营单位名称 + newipzlid 去重。

3. 关联专利变量、逐年写出并拆分。 用 newipzlid 连接专利分年 CSV 获取全部专利变量,逐年结果先存为 RDS,全部跑完后合并为单一 匹配结果.dta,再按 年份 拆分为 17 个分年 dta:

*- 拆分成逐年数据
use "匹配结果.dta", clear
split_by_var 年份, folderpath("海关与专利数据库匹配结果") prefix("data")

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

数据引用格式

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

RStata 数据中心: 2000~2016年海关与专利数据匹配结果(版本2). 2026. https://tidyfriday.cn/rsdb2/

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

RStata Data Center: Customs and Patent Data Matching Results (Version 2), 2000–2016. 2026. https://tidyfriday.cn/rsdb2/

关联课程/数据推荐

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

2000~2016 年海关数据与工商注册信息匹配结果(版本2):https://rstata.duanshu.com/#/course/fe61acdee53d4000bb4b80ec0afbfff4

2000~2016 年上市公司与海关数据库匹配结果:https://rstata.duanshu.com/#/course/42d505c537b74054aa0b268153a21bfa

1985~2024 年专利申请与授权数据(版本 3,含申请人所处的省市区县):https://rstata.duanshu.com/#/course/2397451274c546d3a36e156ffc865988

如何匹配中国工业企业数据库和海关数据库?以 2013 年为例:https://rstata.duanshu.com/#/course/5463b8d7afcb438ca1e537fa76c1a45d

如果你有相关的定制需求(例如希望把其他企业名单与专利数据做匹配),也可以联系 RStata 的李老师付费定制:

RStata 定制|专利数据匹配服务:https://rstata.duanshu.com/#/course/fd3bb2ac5b86425894a9814a02b36ac7

点击这里跳转到 RStata 短书平台获取附件:2000~2016 年海关与专利数据匹配结果(版本2)

评论