clear all mata: mataclear *- 读取数据 use 2001, clear *> (数据处理:微信公众号 RStata)
由于专利数据中同时包含了专利的申请和授权公告,所以有重复的,在统计数量前需要进行去重。通常公开公告号的结尾字母用以区分公告类别,例如 A 代表发明专利的申请公开,B 代表发明专利的授权公告,U 代表实用新型专利的授权公告,S 代表外观设计专利的授权公告。因此可以通过去除公开公告号结尾的字母进行去重,另外申请号也存在重复的,也需要进行去重。
*- 去除重复专利 gen 公开公告号_clean = ustrregexra(公开公告号, "[A-Z]$", "") duplicatesdrop 公开公告号_clean, force *> Duplicates in terms of 公开公告号_clean *> (833 observations deleted) duplicatesdrop 申请号, force *> Duplicates in terms of 申请号 *> (13,567 observations deleted) *- 保留发明专利和需要的变量 keepifindex(专利类型, "发明") *> (105,139 observations deleted) ren 年份 year ren IPC ipc ren 市 city dropifmissing(city) | missing(ipc) *> (6 observations deleted) keep newipzlid year city ipc save df1, replace *> file df1.dta saved
IPC 分类号使用分号分隔,可以使用 split + gather 进行拆分和转置:
*- 拆分IPC并提取小类 use df1, clear *> (数据处理:微信公众号 RStata) replace ipc = ustrregexra(ipc, "[s.]", "") *> (21,196 real changes made) split ipc, p(";") gen(ipc_) *> variables created as string: *> ipc_1 ipc_3 ipc_5 ipc_7 ipc_9 ipc_11 ipc_13 ipc_15 ipc_17 ipc_19 ipc_21 ipc_23 ipc_25 ipc_27 ipc_29 ipc_31 ipc_33 ipc_35 ipc_37 *> ipc_2 ipc_4 ipc_6 ipc_8 ipc_10 ipc_12 ipc_14 ipc_16 ipc_18 ipc_20 ipc_22 ipc_24 ipc_26 ipc_28 ipc_30 ipc_32 ipc_34 ipc_36 drop ipc gather ipc* *> newipzlid year city dropifmi(value) *> (926,318 observations deleted) dropvar gen ipc = substr(value, 1, 4) drop value save df2, replace *> file df2.dta saved
gather 是外部命令,可以使用下面的代码安装:
ssc install tidy
下面就可以开始一步步的计算了。
步骤1:计算每个城市-年份-IPC的专利数量
use df2, clear *> (数据处理:微信公众号 RStata) contract year city ipc, freq(patent_count) save patent_count, replace *> file patent_count.dta saved
步骤2:计算每个城市每年所有 IPC 的专利总数
use patent_count, clear *> (数据处理:微信公众号 RStata) collapse (sum) total_city = patent_count, by(year city) save city_year_total, replace *> file city_year_total.dta saved
步骤3:计算每年每个IPC的全国专利总数
use patent_count, clear *> (数据处理:微信公众号 RStata) collapse (sum) total_ipc = patent_count, by(year ipc) save ipc_year_total, replace *> file ipc_year_total.dta saved
步骤4:计算 RPCA(显性专利比较优势指数)
use patent_count, clear *> (数据处理:微信公众号 RStata) mergem:1 year city using city_year_total, nogen *> Result Number of obs *> ----------------------------------------- *> Not matched 0 *> Matched 11,158 *> ----------------------------------------- mergem:1 year ipc using ipc_year_total, nogen *> Result Number of obs *> ----------------------------------------- *> Not matched 0 *> Matched 11,158 *> ----------------------------------------- gen share_city = patent_count / total_city egen total_national = total(patent_count), by(year) gen share_national = total_ipc / total_national gen RPCA = share_city / share_national gen x_id = cond(RPCA > 1, 1, 0) save rpc_data, replace *> file rpc_data.dta saved
use df1a, clear replace ipc = substr(ipc,1,4) save df2, replace
再继续计算 IPC 共现矩阵:
use patent_ipc_pairs.dta, clear contract ipc1 ipc2, freq(C_ij) save ipc_pairs, replace *> file ipc_pairs.dta saved *- 计算每个 IPC 的专利总数(用于归一化) use df2, clear *> (数据处理:微信公众号 RStata) duplicatesdrop newipzlid ipc, force *> Duplicates in terms of newipzlid ipc *> (41,568 observations deleted) keep newipzlid ipc contract ipc, freq(total_patents) dropif ipc == " C1" *> (1 observation deleted) save ipc_total_patents, replace *> file ipc_total_patents.dta saved
构建技术关联矩阵 Φ:
use ipc_pairs, clear ren ipc1 ipc mergem:1 ipc using ipc_total_patents, nogen *> (variable ipc was str4, now str20 to accommodate using data's values) *> Result Number of obs *> ----------------------------------------- *> Not matched 16 *> from master 0 *> from using 16 *> Matched 8,890 *> ----------------------------------------- rename total_patents total_i ren ipc ipc1 ren ipc2 ipc mergem:1 ipc using ipc_total_patents, nogen *> (variable ipc was str4, now str20 to accommodate using data's values) *> Result Number of obs *> ----------------------------------------- *> Not matched 32 *> from master 16 *> from using 16 *> Matched 8,890 *> ----------------------------------------- rename total_patents total_j ren ipc ipc2 dropifmi(C_ij) *> (32 observations deleted) egen max_patent = rowmax(total_i total_j) gen phi_ij = C_ij / max_patent keep ipc1 ipc2 phi_ij *- 标准化 egen min = min(phi_ij) egen max = max(phi_ij) replace phi_ij = (phi_ij - min) / (max - min) *> (8,890 real changes made) drop min max save phi_mat, replace *> file phi_mat.dta saved *- 转换成矩阵 spread ipc2 phi_ij
foreach i of varlist _all { cap replace `i' = 0 if mi(`i') } save phi_mat_wide, replace
步骤6:构建每个城市每年的技术优势向量 M_mat
use phi_mat, clear keep ipc1 ren ipc1 ipc duplicatesdrop _all, force *> Duplicates in terms of ipc *> (8,303 observations deleted) save ipclist, replace *> file ipclist.dta saved use rpc_data, clear *> (数据处理:微信公众号 RStata) keep year city ipc x_id joinby ipc using ipclist spread ipc x_id
foreach i of varlist _all { cap replace `i' = 0 if mi(`i') } save M_mat, replace
步骤7:计算两个城市 c 和 d 之间的技术互补指数 comp_cd
*- 假设我们选择年份 2001,北京市和上海市 use phi_mat_wide, clear drop ipc1 mkmat _all, mat(phi_mat)
评论