名师讲堂|使用 Stata 测算上市公司关键核心技术突破指标面板数据(熵权法)

指标来源与背景

关键核心技术突破(CKTB,Critical and Key Technology Breakthrough)指标体系来源于王海花等(2026)发表于《科学学研究》的论文:《专精特新企业技术专业化与关键核心技术突破》。

该研究以我国前五批上市的专精特新小巨人企业中新一代信息技术产业为研究对象,深入探索技术专业化对关键核心技术突破的作用效应,在实证研究中使用专利数据构建了 CKTB 综合评分指标。

理论依据

关键核心技术具有以下三个核心特征:

特征维度 含义
基础性 技术的科学根基深厚、知识积累丰富,体现研究与开发的深度
体系性 技术在产业体系中的地位,体现与上下游关联的广度与合作
竞争性 技术在国际市场中的差异化竞争力,体现技术覆盖与保护范围

测度指标

基于三大特征维度,论文构建了如下 7 个专利层面指标:

特征维度 测度指标 专利指标
基础性 科学关联度 npl(非专利文献引用量)
基础性 技术累积度 bwd_cite(引用专利数量)
基础性 权利要求 claims(权利要求数量)
体系性 社会价值 fwd_cite(3年内被引用次数)
体系性 合作范围 assignees(专利权人数量)
竞争性 同族专利 family(同族成员数量)
竞争性 技术覆盖范围 ipc_cover(跨IPC部分类号数量)

指标说明:

  • 非专利文献引用量(npl):专利引用的科技文献(如学术论文)数量,反映专利的科学知识根基深度
  • 引用专利数量(bwd_cite):专利引用的在先专利数量(向后引用),体现技术积累程度
  • 权利要求数量(claims):专利权利要求条款数,条款越多代表技术覆盖越精细
  • 3年内被引次数(fwd_cite):专利申请后3年内被其他专利引用的次数,体现技术社会价值
  • 专利权人数量(assignees):联合申请人数量,反映合作创新程度
  • 同族成员数量(family):在其他国家/地区提交的同族专利数,体现国际竞争布局
  • IPC覆盖(ipc_cover):企业当年专利跨越的 IPC 部(section)数量,反映技术领域多样性

熵权法原理

**熵权法(Entropy Weight Method)**是一种客观赋权方法,不依赖专家主观判断,而是根据各指标的信息量来自动决定权重。其核心思想是:

如果某个指标在所有样本中的取值差异很大,说明它包含的信息量多,应给予更高权重;
反之,若某指标的取值在所有样本中基本相同(无差异),则该指标对区分样本无帮助,权重接近 0。

计算步骤

Stata 实现要点

在 Stata 中实现熵权法,核心步骤:

  1. 用 summarize 获取各指标的最小值和最大值
  2. 用 gen 生成标准化变量 X_norm = (x - min) / (max - min) + 1e-10
  3. 用 summarize 计算列和,生成占比 P = X_norm / colsum
  4. 用 log() 函数和 summarize 计算信息熵
  5. 用 local 宏存储权重,最后用 replace 累加得分

关键注意事项:

  • 当 max - min = 0(即所有值相同时),分母需替换为 1e-10 防止除零
  • X_norm 需加 1e-10 避免 log(0)
  • 信息熵 E 上限为 1,超过时需截断

数据准备

本讲义使用的数据文件:

文件 说明
2010~2012年上市公司与专利数据匹配结果_含引用与被引用信息_sim.dta 主数据:专利-企业匹配,含引用信息(10 个变量)
1985~2024年各专利当年~十一年内的被自引、被他引数量统计_sim.dta 被引统计:专利被引的分年统计(4 个变量)
拓展专利信息_sim.dta 拓展信息:权利要求数量、同族专利(3 个变量)

_sim 文件是从原始完整 DTA 中提取所需变量生成的精简版,变量说明:

主数据(10 个变量):

原始变量 Stata 变量名 说明
股票代码 firm_id 企业标识
股票名称 stock_name 企业名称
newipzlid patent_id 专利 ID
年份 apply_year 申请年份
引证专利 bwd_cite_raw 引用的专利编号(分号分隔)
当前权利人 assignees_raw 专利权人(分号分隔)
IPC ipc_raw IPC 分类号(可能含多个,分号分隔)
公开公告号 pub_id 用于去重
申请号 app_id 用于去重
引证科技文献 npl_raw 引用的非专利文献(XML 格式)

被引统计(4 个变量):

原始变量 Stata 变量名 说明
newipzlid patent_id 专利 ID
year cite_year 统计年份
引用或被引用 cite_type “被他引信息” / “被自引信息”
三年内 fwd_cite 3 年内被引次数

拓展信息(3 个变量):

原始变量 Stata 变量名 说明
newipzlid patent_id 专利 ID
权利要求数量 claims_ext 权利要求条款数
扩展同族 family_raw 同族专利编号(分号分隔)

上市公司数据来自:

1985~2024 年上市公司与专利数据匹配结果(版本3, 含申请、授权信息): https://rstata.duanshu.com/#/brief/course/04100321f88b411f90429be934934bff

被自引、被他引数量统计数据来自:

1985~2024 年各专利当年~十一年内的被自引、被他引数量统计: https://rstata.duanshu.com/#/brief/course/51e62d1eae074a4d8174a3969f5025c6

拓展专利信息.csv 是我又从原始专利数据提取补充的一些变量:

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


单公司演示:以凯莱英(002821)2012 年为例

为了清晰演示 CKTB 的计算过程,我们以凯莱英(股票代码:002821)2012 年的数据为例,逐步演示每个步骤。凯莱英是一家以化学合成和医药研发为核心的创新型企业,2012 年共申请了 15 件专利,样本量适中,演示效果清晰。

注意:熵权法需要在全样本上计算权重,因此以下代码虽然只展示凯莱英的结果,但所有专利都参与了熵权法的计算。

第一步:读取主数据

use "`base'/2010~2012年上市公司与专利数据匹配结果_含引用与被引用信息_sim.dta", clear

*- 变量重命名
rename 股票代码 firm_id
rename 股票名称 stock_name
rename newipzlid patent_id
rename 年份 apply_year
rename 引证专利 bwd_cite_raw
rename 当前权利人 assignees_raw
rename IPC ipc_raw
rename 公开公告号 pub_id
rename 申请号 app_id
rename 引证科技文献 npl_raw

destring apply_year, replace force

第二步:专利去重

*- 读取被引统计中的专利 ID(用于去重时优先保留)
preserve
use newipzlid using "`base'/1985~2024年各专利当年~十一年内的被自引、被他引数量统计_sim.dta", clear
duplicates drop
rename newipzlid cite_id
gen byte in_cite_flag = 1
tempfile cite_ids
save `cite_ids'
restore

*- 合并 in_cite 标记
rename patent_id cite_id
merge m:1 cite_id using `cite_ids'
gen byte in_cite = (_merge == 3)
drop _merge
rename cite_id patent_id

*- 清洗公开公告号:去掉末尾字母
gen pub_id_clean = regexr(pub_id, "[A-Za-z]$", "")

*- 排序:优先保留有被引记录的专利
gsort firm_id apply_year -in_cite

*- 去重 1:按 firm_id + apply_year + pub_id_clean
bysort firm_id apply_year pub_id_clean: keep if _n == 1

*- 去重 2:按 firm_id + apply_year + app_id
bysort firm_id apply_year app_id: keep if _n == 1

去重逻辑说明:

  1. 先从被引统计表中提取所有出现过的专利 ID,用于标记 in_cite
  2. 对每个 firm_id + apply_year 组合,按公开公告号(去掉末尾字母)去重,优先保留有被引记录的专利
  3. 再按申请号去重,同样优先保留有被引记录的专利

第三步:读取拓展信息并合并

preserve
use "`base'/拓展专利信息_sim.dta", clear
rename newipzlid patent_id
rename 权利要求数量 claims_ext
rename 扩展同族 family_raw
tempfile ext
save `ext'
restore

merge m:1 patent_id using `ext', keep(master match) nogen

注意使用 merge m:1:同一专利可能被多家公司持有,主数据中 patent_id 不唯一。

第四步:提取专利层面 CKTB 指标

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

指标提取要点:

  • bwd_cite / assignees / family:原始列是分号分隔的编号列表,计数方法为 分号数 + 1
  • npl:原始”引证科技文献”列为 XML 格式文本(每条文献由 … 标签包裹),通过统计 闭合标签数量来计数
  • ipc_cover:从 IPC 列提取所有分类号的部首字母(IPC 列可能含多个分号分隔的分类号),统计企业当年专利跨越的不同部数量

第五步:合并 3 年内被引次数

preserve
use "`base'/1985~2024年各专利当年~十一年内的被自引、被他引数量统计_sim.dta", clear
keep if 引用或被引用 == "被他引信息"
rename newipzlid patent_id
keep patent_id year 三年内
rename year cite_year
rename 三年内 fwd_cite
destring fwd_cite, replace force
tempfile fwd
save `fwd'
restore

*- 按 patent_id + cite_year(=apply_year) 合并
gen cite_year = apply_year
merge m:1 patent_id cite_year using `fwd', keep(master match) nogen
replace fwd_cite = 0 if fwd_cite == .
drop cite_year

fwd_cite 合并说明:被引统计表中的 year 是被引统计的年份,对应专利的申请年份 apply_year,因此按 patent_id + cite_year 匹配。

第六步:运行熵权法

local indicators "npl bwd_cite claims fwd_cite assignees family ipc_cover"
local n = _N

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

第七步:汇总到企业-年度

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

Top 10% 稳健性指标:

use `full_data', clear
qui summarize cktb_score, detail
local top10_thr = r(p90)
gen is_top10 = (cktb_score >= `top10_thr')

全量计算:所有公司、所有年份

上面演示了单家公司的计算逻辑,以下代码对全部数据(2010~2012 年)进行批量计算。

注意:由于被引统计和拓展信息数据文件较大,完整运行需要较多内存(建议 16 GB+ RAM)和时间。全量计算代码保存在 cktb_full.do 文件中,可直接运行。

全量计算与演示版的代码逻辑完全相同,区别仅在于:

  • 演示版最终只展示凯莱英的结果,全量版展示所有企业
  • 全量版额外计算 CKTB_Top10 稳健性指标并保存结果文件

变量说明

最终输出的企业-年度面板数据包含以下变量:

变量名 说明
firm_id 股票代码
year 专利申请年份
CKTB 熵权法综合得分(企业当年所有专利的均值)
n_patents 当年有效专利数量
ipc_cover 当年专利跨越的 IPC 部(section)数量
CKTB_Top10 得分位于前 10% 的关键核心技术专利数量(稳健性检验)

把上市公司专利数据替换成全部年份的就可以计算全部结果了~

点击这里跳转到 RStata 短书平台获取附件:名师讲堂|使用 Stata 测算上市公司关键核心技术突破指标面板数据(熵权法)

评论