上次课程主页:https://rstata.duanshu.com/#/course/fb64d7abf9c74710a7e6fffde4d2e136
继续上次课的内容,今天我们继续讲解第三部分:
专利的前向相似度与后向相似度:使用 Stata 计算专利关键数字技术突破创新指标(三):使用并行技术提升计算速度。
在之前的课程「使用 Stata 进行地理编码:地址解析经纬度、坐标转换 & 根据经纬度判断所处的省市区县」中,我给大家介绍过使用 parallel 进行并行的方法。今天我们再来介绍下 Mata 程序中如何使用并行技术提升速度。
使用 Stata 进行地理编码:地址解析经纬度、坐标转换 & 根据经纬度判断所处的省市区县:https://rstata.duanshu.com/#/brief/course/537300af1a9947edb758789785c600f3
上次课的结尾我们给出了计算所有专利相似度的 Mata 代码:
cd "~/Desktop/专利的前向相似度与后向相似度:使用 Stata 计算专利关键数字技术突破创新指标(三)" |
mata: |
在 Stata 中可以使用 parallel 命令进行并行运算,安装方法如下:
net install st0572.pkg, from("http://www.stata-journal.com/software/sj19-3") replace |
注意不要用 ssc install 安装,ssc 上的 parallel 和我介绍的这个用法不同。
如果我们是直接下载文件,直接保存相应的循环代码,然后 parallel do … 就好了,但是这里我们是需要把所有的结果保存到单个 csv 文件里面,如果直接这样做,结果会乱掉。因此我们需要修改下代码,也就是每个进程的结果保存到各自的文件里面。para_matacode.do 里面的代码就是修改好的:
*- 此处代码需下载讲义材料查看~ |
worker_id = st_global("pll_instance") 代码可以从 Stata 的环境中提取每个进程的编号,然后就可以每个进程保存不同的 csv 文件了。在代码的结尾我还设置了直接把 csv 文件直接转换成 dta 的程序。
cap mkdir "csv" |
parallel initialize 16, force 表示创建了 16 个线程,这个数量需要根据自己电脑的配置设定,并非越多越好。可以运行下面的代码查看可用进程数量:
c(processors_mach) |
para_matacode.do 就是前面展示的 Mata 代码。
parallel clean 用于清除多线程运算过程中产生的相关文件。
另外有个非常重要的注意事项。在 Windows 电脑上,parallel 的使用要求工作目录中不能出现中文,最好相关的文件名称也不要有中文。否则可能会报错。
合并结果:
appendall dta |
appendall 的源代码在附件中也有提供。
ren (v1 v2 v3 v4) (newipzlid date BS FS) |
这样就计算得到了每个专利的突破性创新指标。不过这里我没有限定时间范围,想要限定时间范围可以参考上次课程修改。
点击这里跳转到 RStata 短书平台获取附件:名师讲堂|专利的前向相似度与后向相似度:使用 Stata 计算专利关键数字技术突破创新指标(三)
评论