一招轻松合并文件——openall命令介绍
本文作者:宁刘莹
文字编辑:李婷婷
技术总编:余术玲
爬虫俱乐部云端课程来袭!
爬虫俱乐部于2020年7月在线上举行的Stata和Python培训课程在腾讯课堂纷纷上线啦!现在关注公众号并在朋友圈转发推文,即可获得600元课程优惠券,集赞50个再领200元课程优惠!(截图发至本公众号后台领取)原价2400元的课程,现在只要1600元!
爬虫俱乐部将于2020年8月25日至28日在线上举行Stata数据分析法律与制度专题训练营,主要是为了让学员掌握Stata软件进阶操作,涉及内容包括基本字符串函数及其应用、正则表达式、法律与制度数据网络爬虫技巧、判案文书的文本分析等技术。课程全部采用最新版Stata16软件(提供Stata16试用版, 试用期一个月)进行教学,课程通过案例教学模式,专题式的讲解使你能在短时间内掌握Stata的精髓,精选的实例和详实的配套资料能让你在课后快速拓展所学,并能够编写一些实用的Stata程序,为进一步学习和科研打下扎实的基础。同时,此次云端课程提供线上答疑。详情请参考《8月Stata数据分析法律与制度专场来啦!》
导读
在日常的研究中,我们经常会从各个数据库中下载数据文件,这些文件或是不同年份的,或是不同公司的,而进行回归的前提是要将它们合并为一个数据,这时大家第一反应往往是打开Stata,用append方法循环合并。但实际上还有一个更为简便的方法,那就是——openall。今天小编来带大家一次性掌握openall命令的使用。
openall的语法如下:
openall [files], [directory(string)] [storefilename(string)] [insheet]
其中files是指要合并的文件,可以使用通配符“*”,也可以什么都不加,默认合并当前或指定文件夹下的所有dta文件。需要注意的是,这里不能指定文件的扩展名,如“.dta”、“.csv”等。
该命令的选项有:
directory()用来指定文件所在的路径,若不指定则默认为当前路径;
storefilename()用来生成合并后数据集中的一个变量,显示观测值来源的文件名;
insheet选项用于指定要合并的文件格式为csv。
接下来我们用具体的例子来操作一下。
首先我们要先安装该命令:
ssc install openall
为了方便大家跟着操作,这里我们用程序直接生成一些dta文件,再用openall进行合并。
首先,我们使用cntrade命令直接下载平安银行的交易数据,并保留1997-2020年的部分,将每一年的数据分别保存为一个dta文件,保存到D:\openall路径下。
clear all
cap mkdir D:\openall
cd D:\openall
cntrade 000001
erase 000001.dta //由于cntrade会自动在当前路径下生成一个“000001.dta”文件,为避免影响后面的合并,这里先将该文件清除
keep if year(date) >= 1997 & year(date)<=2020
forvalues i = 1997/2020 {
preserve
keep if year(date) == `i'
save `i', replace
restore
}
同样的方法,我们用cnstock命令下载上市公司的股票代码,并随机保留10家,按照股票代码不同分为10个文件,保存在另一路径下。
clear all
cap mkdir D:\stock
cd D:\stock
cnstock all
sample 10, count
erase cnstock.dta
levelsof stkcd, local(cd)
foreach i in `cd' {
preserve
keep if stkcd == `i'
save `i', replace
restore
}
目前我们的工作路径是D:\stock,这时我们使用openall命令,默认将当前路径下的所有dta文件全部合并:
openall //与在openall后面直接加一个“*”效果相同
如果想要合并平安银行的交易数据(在D盘另外一个路径),则使用directory选项指定路径即可:
openall, directory(D:\openall)
由于每一年的交易数据文件都是以年份命名的,因此若只想合并2000年以来的数据,则只需配合通配符使用:
openall 20*, directory(D:\openall)
此时内存中只有2000-2020年的数据,1997、1998、1999年的数据不会被合并进来。
若想观察观测值分别来源于哪个文件,则使用storefilename选项即可:
openall, storefilename(file)
来源文件名就显示了出来。除此之外我们发现,由于没有指定路径,这次合并的是D:\stock下的文件,说明directory选项并不会改变当前工作路径。
此外,若要合并全部的csv文件,甚至不用一一读入Stata并保存成dta文件,直接加一个insheet选项就可以做到:
openall, insheet
综上,如果下次需要合并某一文件夹下的全部dta文件或者csv文件时,可以直接使用openall命令,而不用进行宏扩展函数、append方法循环等一系列复杂的操作啦!
高校经管类核心期刊发文排行榜|2010-2019
PDF文本信息提取(二)
关于我们
微信公众号“Stata and Python数据分析”分享实用的stata、python等软件的数据处理知识,欢迎转载、打赏。我们是由李春涛教授领导下的研究生及本科生组成的大数据处理和分析团队。
1)必须原创,禁止抄袭;
2)必须准确,详细,有例子,有截图;
注意事项:
1)所有投稿都会经过本公众号运营团队成员的审核,审核通过才可录用,一经录用,会在该推文里为作者署名,并有赏金分成。
2)邮件请注明投稿,邮件名称为“投稿+推文名称”。
3)应广大读者要求,现开通有偿问答服务,如果大家遇到有关数据处理、分析等问题,可以在公众号中提出,只需支付少量赏金,我们会在后期的推文里给予解答。