使用 Stata 提取和处理数字经济核心产业分类与国际专利分类参照关系表
该课程已经讲解完,感兴趣的小伙伴可以点击文末的阅读原文跳转到 RStata 平台观看视频讲解~
今天我们一起来看下如何使用 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 平台观看视频讲解~
直播地址:腾讯会议(需要报名 RStata 培训班参加) 讲义材料:需要购买 RStata 名师讲堂会员,详情可阅读:一起来学习 R 语言和 Stata 啦!学习过程中遇到的问题也可以随时提问!
更多关于 RStata 会员的更多信息可添加微信号 r_stata 咨询:
附件下载(点击文末的阅读原文即可跳转):
https://rstata.duanshu.com/#/brief/course/b2c71978336b4b39b69f05d6537d9d8f