「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在服务器上直接跑数据。
希望本文对你有帮助:)
领取专属 10元无门槛券
私享最新 技术干货