使用Stata提高研究效率的小技巧

「1」

很多时候,我们会同时进行好几个项目。不同的项目会有很多个do file,很多时候困扰我们的一个事情是「我们忘记了这个do file到底是什么的」。更常见的情况是,我们不但使用了Stata,在同一个项目里,还使用了Matlab、SAS,甚至Python。通常的工作流是「Python爬虫获取数据,SAS处理大数据集,然后Matlab完成数值计算,Stata完成回归结果的计算和输出」。

当然这个工作流的链条有点长,但是我们面对的一个现实问题是「遗忘」。所以高效地管理我们的程序非常重要。

以Stata程序为例,我想到了一种高效管理程序的方式。首先第一步,我们要把存放程序的地址找到,读取每一个do文件。

cd "C:\Users\Desktop\Stata codes"

log using "aa.txt",replace

dir *.do

log close

上面的程序,把文件夹下面的do file的信息读取到了一个到aa.txt文件里。接下来,我们读取这个txt文件,做一些简单的数据清洗。

import delimited using "C:\Users\Desktop\Stata codes\aa.txt",clear

drop in `=_N-8'/`=_N'

drop in 1/8

drop v2

replace v1=subinstr(v1,"","",.)

replace v1=subinstr(v1,"","",.)

replace v1=subinstr(v1," "," ",.)

replace v1=subinstr(v1," "," ",.)

replace v1=stritrim(strtrim(v1))

split v1,p("")

drop v1

rename v11 memory

rename v14 codesname

split v12,p("/")

destring _all,replace

replace v123=18 if v123==15

gen year=v123+2000

gen date=mdy(v121,v122,year)

drop v121 v122 year v12 v123

rename v13 hour

format date %dCY-N-D

save manage_dofiles,replace

清洗完成后,我们把它存到一个叫「manage_dofiles」的dta文件里,接下来我们手工给每个程序增加标签,帮助我们描述每一个do文件的功能。

假设我们对几个do文件增加标签,即生成一个content变量:

上面的过程仅仅展示了Stata程序的录入,我们同时可以把其他软件的源文件录入进去,新建一个group的变量,来代表我们project的名字。

下次如果忘了某一个do文件是干什么的,打开这个dta就一目了然了。

「2」

程序多了,很多时候我们还想要快速查找到某一段程序在哪一个do文件里。比如我想找到包含关键词「event study」的do文件。

首先需要安装一个rcd的外部程序:

ssc install rcd

然后我们再在我们的文件里搜索关键词,「event study」。

rcd "C:\Users\Desktop\Stata codes" : find *.do , match(event study) show

搜索的结果如下:

在event_study.do文件的第14行里,出现了我们要搜索的关键词。

「3」

Stata处理大数据的能力一直饱受诟病,所以很多金融会计的实证研究者,一般使用SAS清洗数据,同时使用Stata进行回归结果的输出。而在今年WRDS推出的云服务(WRDS Cloud)正式支持Stata了(使用Stata导入WRDS数据)。强烈安利大家申请一个WRDS账户,然后利用服务器的计算能力帮助我们提高研究效率。

按照WRDS官方的说明,Windows用户需要下载两个软件来快捷地使用云服务,一个是「PuTTY」,它提供了我们和服务器的交互,另一个是「WinSCP」,帮助我们上传和下载服务器上的各类文件。

我们首先看一眼,服务器上的Stata真容。

服务器提供的是Stata15.1的MP版本,最大支持20亿个观测值,5000个变量。而WRDS服务器提供了高性能的计算环境,它由40个「24核、256G」内存的server组成。更让人惊喜的是,服务器本身提供了WRDS数据库的数据,高达350个TB。对于个人用户来说,它提供10GB的永久空间,同时高达500GB的临时空间。这简直是实证研究者的天堂。

我们首先在交互模式下,WRDS服务器上有那些数据。

odbc load, exec("select distinct frname from wrds_lib_internal.friendly_schema_mapping;") dsn("wrds-postgres")

list

我们惊喜的发现,WRDS上有国内最常用的CSMAR数据库。

本想以CSMAR数据库举例,但我的账号没有access。那我还是以CRSP数据库为例。我们看一下CRSP数据库上有哪些子库。

odbc load, exec("select distinct table_name from information_schema.columns where table_schema='crsp' order by table_name;") dsn("wrds-postgres")list

接下来,我们可以具体去看每一个子库包含那些变量。限于篇幅,我就不一一展示了。

总结一下我们的建议:(1)如果我们研究涉及的数据库直接在WRDS上找到,那就直接在服务器上下载。(2)如果我们预估一段程序需要消耗较长的运算时间,那可以在本地写好do文件,用小数据测试无误后,把路径修成服务器的路径。同时把数据通过WinSCP上传到服务器上,然后使用PuTTY在服务器上直接跑数据。

希望本文对你有帮助:)

  • 发表于:
  • 原文链接:https://kuaibao.qq.com/s/20181105B09KMM00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。

扫码关注云+社区

领取腾讯云代金券