使用 Stata 提取和处理数字经济核心产业分类与国际专利分类参照关系表

今天我们一起来看下如何使用 Stata 从 pdf 文档中提取表格并处理,具体来说是提取「数字经济核心产业分类与国际专利分类参照关系表(2023)」文件中的专利分类号范围。

首先第一步我们可以使用这个在线 pdf 文本识别应用把 pdf 里面的表格转换成 xlsx 格式的,由于该网站免费转换的文档不能超过 10 页,所以我把这个文档拆分成了两个 pdf 分别转换,得到了下面两个文件:

在线文本识别转换:https://ocr.wdku.net/

  • data1_output.xlsx
  • data2_output.xlsx

然后再手动简单整理下,把两个文档合并起来:

  • data.xlsx

下面就可以用 Stata 处理这个文件了。

读取该文件:

import excel using "data.xlsx", clear first
remove_some_char " ", trim

remove_some_char 是我现编的 Stata 命令,用于去除所有字符串变量中的空格:

*! remove_some_char " ":直接把所有的 string 变量去除空格
*! remove_some_char " ", trim:直接把所有的 string 变量去除空格,再 strtrim 下
cap prog drop remove_some_char
prog def remove_some_char
syntax anything [, trim]
foreach i of varlist _all {
cap replace `i' = subinstr(`i', `anything', "", .)
if "`trim'" != "" {
cap replace `i' = strtrim(`i')
}
}
end

填补下前几个变量的缺失值:

carryforward 数字经济核心产业大类 数字经济核心产业中类 数字经济核心产业小类, replace
formatallstr %10s
label data "数据处理:微信公众号 RStata"
save "数字经济核心产业分类与国际专利分类参照关系表", replace

formatallstr 也是我现编的,用于快速把所有的字符串变量按照指定格式 format:

*! formatallstr %10s:直接把所有的 string 变量格式化成 %10s
cap prog drop formatallstr
prog def formatallstr
syntax anything
foreach i of varlist _all {
cap format `i' `anything'
}
end

数据中国际专利分类是用“、”符号隔开的,下面我们把这个变量适应顿号分开,然后再转换成长数据:

*- 拆分 IPC
use 数字经济核心产业分类与国际专利分类参照关系表, clear
gen id = _n
split 国际专利分类, parse("、")
drop 国际专利分类
gather 国际专利分类*
order id
gsort id
drop var
drop if value == ""
ren value IPC

这里面专利分类号类别有很多种形式,下面我们通过长度来分类:

gen len = strlen(IPC)
gsort id IPC
gen ipcid = _n
tab len

*> len | Freq. Percent Cum.
*> ------------+-----------------------------------
*> 4 | 1 0.09 0.09
*> 5 | 202 18.74 18.83
*> 6 | 204 18.92 37.76
*> 7 | 374 34.69 72.45
*> 8 | 121 11.22 83.67
*> 9 | 122 11.32 94.99
*> 10 | 40 3.71 98.70
*> 11 | 14 1.30 100.00
*> ------------+-----------------------------------
*> Total | 1,078 100.00

save "data1", replace

然后我们就分别处理不同长度的。

长度为 4 或 5 的都是小类:

use data1, clear
tab len
keep if len <= 5
order id ipcid
drop len
remove_some_char "*", trim
save ipcres1, replace

长度为 6 的是大组的:

use data1, clear
tab len
keep if len == 6
remove_some_char "*", trim
order id ipcid
drop len
save ipcres2, replace

长度为 7 的也是大组的:

use data1, clear
tab len
keep if len == 7
remove_some_char "*", trim
order id ipcid
drop len
save ipcres3, replace

长度为 8 的分两种情况:

use data1, clear
tab len
keep if len == 8
keep if !index(IPC, "*")
order id ipcid
drop len
save ipcres4, replace

use data1, clear
tab len
keep if len == 8
keep if index(IPC, "*")
order id ipcid
drop len
remove_some_char "*", trim
save ipcres5, replace

长度为 9、10、11 的也分别处理下:

use data1, clear
tab len
keep if len == 9
order id ipcid
drop len
remove_some_char "*", trim
save ipcres6, replace

use data1, clear
tab len
keep if len == 10
order id ipcid
drop len
remove_some_char "*", trim
save ipcres7, replace

use data1, clear
tab len
keep if len == 11
order id ipcid
drop len
remove_some_char "*", trim
save ipcres8, replace

可以看到 4、6、7、8 其实都是直接的 IPC 分类号,可以合并起来:

*- 合并 4 6 7 8
use ipcres4, clear
append using ipcres6
append using ipcres7
append using ipcres8
save ipcres4, replace

*- 删除 6 7 8
cap erase ipcres6.dta
cap erase ipcres7.dta
cap erase ipcres8.dta

这样我们就得到了下面几个文件:

  • ipcres1.dta
  • ipcres2.dta
  • ipcres3.dta
  • ipcres4.dta
  • ipcres5.dta

使用 ipcres1.dta 进行筛选的时候,提取 IPC 分类号的前 4 位字符串就可以匹配筛选了;使用 ipcres2.dta 进行筛选的时候是提取前 5 位;使用 ipcres3.dta 进行筛选的时候是提取前 6 位;使用 ipcres4.dta 进行筛选的时候是直接进行匹配;使用 ipcres5.dta 进行筛选的时候是提取前 7 位。

这部分操作也可以参考平台上的绿色专利筛选课程。

×

点击这里跳转到 RStata 短书平台获取附件:使用 Stata 提取和处理数字经济核心产业分类与国际专利分类参照关系表

评论