do文件中的“post”命令——无处可藏
本文作者:李钊颖
文字编辑:李钊颖
技术总编:李朋冲
最近,计量领域的一件大事就是Stata16的发布,知识与工具更新的速度更快了,只有持续学习,才能跟上发展的潮流!我们不必惊慌“智商不够用”了,最好的方式就是直面改变并拥抱改变,我们相信Stata16一定可以给我们的研究带来更大的便利!
Stata16的新功能有很多:python接口,内存多重数据集,更完善的自动化报告,兼容sas与spss数据,更方便快捷的do-file编辑,当然少不了Stata的看家本领——一系列计量经济学的前沿方法……
为帮助读者了解Stata16,爬虫俱乐部将陆续发布一系列推文,来介绍这些新的功能——我们和广大读者一起拥抱改变!
爬虫俱乐部将于2019年8月22日至28日在湖北武汉举行为期一周的Stata编程技术定制培训,此次培训采用Stata16进行讲解,采取初级班和高级班分批次培训。课程通过案例教学模式,旨在帮助大家在短期内掌握Stata软件编程、金融计量知识和实证分析方法,使大家熟悉Stata核心的爬虫技术,以及Stata与其他软件交互的高端技术。目前正在火热招生中~
详细培训大纲及报名方式,请点击文末阅读原文呦~
如果在某个指定路径下有一组do文件,我们想要知道都有哪几个do文件使用了某个命令,一个一个找当然可以,但费时费力,还容易出错,这时我们可以借助fs命令及一段简单的程序来帮助我们找到符合要求的do文件。
在这个例子中我们在一系列do文件中寻找含有post命令的do文件:
我们可以使用dir命令获取指定路径下所有do文件的信息,例如:
如上图所示,dir命令可以将文件名称、文件大小以及修改日期都列示在结果输出界面中。在推文《宏扩展函数dir的用法介绍》中,我们也详细介绍了dir命令的具体用法。但如果我们仅仅想将文件名列示出来,可以使用fs命令或者filesearch命令(在推文《筛选文件利器——filesearch命令》中我们有详细的介绍),下面我们以fs命令为例,进行说明。
fs命令是stata的外部命令(输入“ssc install fs”进行下载),可以列示缺省路径下的指定类型的文件。fs命令只显示文件的名称,这些文件不包括文件夹和目录,并将结果储存在返回值r(files)中。更改到确定路径之后,输入”fs *.do”,其中, “*”为通配符,表示可以匹配任意零个、单个或多个字符(当然,文件名不能为空,所以此处表示至少有一个字符);“.do”表示do文件;“fs*.do”表示遍历当前路径下的所有do文件。输入该命令之后,结果如下:
输入returnlist 可以看到文件名都储存在了“r(files)”这个返回值中:
接着我们使用foreach循环,依次将“r(files)”返回值中的文件读入,再使用infix命令将文件内容读到stata中,用index函数匹配变量v中含有“post”命令的观测值,并使用keep命令将其保留下来。此时,如果数据中观测值数量不等于0,就说明该文件中使用了post命令。我们可以加入一个判断语句,当观测值数量不等0时,我们将文件名列示在stata的结果窗口。在这里我们以小编电脑上的“寻找post”文件夹为例进行讲解,具体程序如下:
clear all
cd E:\寻找post
fs *.do
foreach file in `r(files)' {
quietly infix strL v 1-10000 using "`file'",clear
quietly keep if index(v,"post")
if _N != 0 {
disp "`file'"
}
}
输出结果只显示了使用post命令的do文件,如图所示:
通过上述简单的程序,我们就能找到指定路径下使用post命令的do文件了。举一反三,现在我们也可以对这段程序稍作改变批量查找do文件中其他的命令啦!
对爬虫俱乐部的推文累计打赏超过1000元我们即可给您开具发票,发票类别为“咨询费”。用心做事,只为做您更贴心的小爬虫!
往期推文推荐
关于我们
微信公众号“爬虫俱乐部”分享实用的stata命令,欢迎转载、打赏。爬虫俱乐部是由李春涛教授领导下的研究生及本科生组成的大数据分析和数据挖掘团队。
此外,欢迎大家踊跃投稿,介绍一些关于stata的数据处理和分析技巧。
投稿邮箱:statatraining@163.com
投稿要求:
1)必须原创,禁止抄袭;
2)必须准确,详细,有例子,有截图;
注意事项:
1)所有投稿都会经过本公众号运营团队成员的审核,审核通过才可录用,一经录用,会在该推文里为作者署名,并有赏金分成。
2)邮件请注明投稿,邮件名称为“投稿+推文名称”。
3)应广大读者要求,现开通有偿问答服务,如果大家遇到关于stata分析数据的问题,可以在公众号中提出,只需支付少量赏金,我们会在后期的推文里给予解答。