文章来源:小花经济学术公众号 已获得授权
今天给大家推送一个很实用的技巧,用 Stata 批量读取多张工作表的 Excel 数据文件。
假设我们在名为 “Stata 读取多张表” 的文件夹下,有一个名为“stata.xlsx”的 Excel 数据文件。
假设我们有 N 个这样的 Excel 数据文件。像这样:
然后每一个 Excel 文件中有这样的表格:
每张表的 sheet 名称是不一样的,比如第一张叫:stata1;第二张叫 Stata_2;第三张表叫 stATA_+3。每一张表里面的范围也可能不尽相同。
怎么用 stata 批量读取呢?一般地,我们会用 import excel 命令读取 excel 文件,通过 help import excel, 我们可以看到它的基本用法:
clear
set more off
cd c:\users\admin\desktop\Stata读取多张表\
import excel using stata.xlsx
*读取 excel 文件,默认读取第一张表格,结果如下:
import excel age name using stata.xlsx ,clear
*读取 excel 文件,读取第一张表格中 age name 变量,结果如下:
import excel using stata.xlsx, sheet(stata1) firstrow clear
*读取 excel 文件,通过sheet 选项读取名为“stata1”的表格中,通过firstrow 选项把工作表中的第一行当成变量名读入。结果如下:
import excel using stata.xlsx, sheet(stata1) firstrow cellrange(A1:C5) clear
*读取excel文件,通过sheet选项读取名为“stata1”的表格中,通过firstrow选项把工作表中的第一行当成变量名读入,通过cellrange 选下把 A1:C5 范围的数据读入。结果如下:
import excel using stata.xlsx , describe
描述 Excel 文件的概况,比如:
我们可以看到,这个 Excel 文件有 3 张表格,还能看见它每张表格的数据范围。
我们在命令窗口输入:return list 。我们可以看到:
Excel 文件的每一张工作表的情况都被一一储存到 Macro 里了。这将是我们需要用到的原料。
面对繁琐重复的工作,我们首先应该想到的是能不能把这项工作程序化,让程序通过循环功能帮我们快速完成工作。
于是:
import excel using stata.xlsx, describe
forvalues s =1/`r(N_worksheet)' {
import excel using stata.xlsx, ///
sheet(`r(worksheet_`s')') ///
cellrange(`r(range_`s')') ///
firstrow clear
save newstata`s'.dta, replace
}
clear
forvaluess = 1/`r(N_worksheet)' {
append using newstata`s'.dta
}
save stata_all.dta,replace
我们可以看到 3 张表就合并过来了!
那么怎么把Stata读取多张表文件夹下的所有 Excel 都读进呢?有两种方法:
*把所有文件夹下所有扩展名为 xlsx 的文件名存进 local files 里:
local files: dir "." file "*.xlsx"
foreach file in `files'{
import excel using "`file'", describe
forvalues s = 1/`r(N_worksheet)' {
import excel using "`file'", ///
sheet(`r(worksheet_`s')') ///
cellrange(`r(range_`s')') ///
firstrow clear
save newstata`s'.dta, replace
}
clear
forvalues s = 1/`r(N_worksheet)' {
append using newstata`s'.dta
}
save "`file'_all.dta",replace
}
ssc install fs
fs *.xlsx
我们可以看到,所有的扩展名为 xlsx的文件名都被保存进来了,那么我们写个循环把上面的处理单个 stata.xlsx 的循环嵌套进来:
fs *.xlsx
foreach file in `r(files)' {
import excel using "`file'", describe
forvalues s = 1/`r(N_worksheet)' {
import excel using "`file'", ///
sheet(`r(worksheet_`s')') ///
cellrange(`r(range_`s')') ///
firstrow clear
save newstata`s'.dta, replace
}
clear
forvalues s = 1/`r(N_worksheet)' {
append using newstata`s'.dta
}
save "`file'_all.dta",replace
}
以上就是今天分享的推文内容了。此外,小编还要宣布一个好消息:
stata培训哪家强?的搜寻结果
1个回答-
提问时间:2017年1月2日
[最佳回答] 亲爱的stata爱好者,您好。
爬虫俱乐部是一个专注解决stata各种疑难杂症的公众号,深受大家喜爱。该公众号即将举办线下stata培训,技术大牛亲手教你stata,赶紧戳开独家Stata技术培训,千呼万唤始出来报名吧!
EmmaWatson 9999……999条好评
接下来报告空气质量
全国空气质量如下
也不说谁最差了
比抽SSR还难
都是难兄难弟,大家都保重
以上就是今天给大家分享的内容了,说得好就赏个铜板呗!有钱的捧个钱场,有人的捧个人场~,点赞打赏随您心意,么么哒~
应广大粉丝要求,爬虫俱乐部的推文公众号打赏功能可以开发票啦,累计打赏超过1000元我们即可给您开具发票,发票类别为“咨询费”。用心做事,只为做您更贴心的小爬虫。第一批发票已经寄到各位小主的手中,大家快来给小爬虫打赏呀~
编辑 by梅洁瓷傲
往期推文推荐:
7.一言不合就用stata写邮件(Outlook/Foxmail)
9.I have a Stata, I have a python
10.I have a Stata, I have a Python之二——pdf转word
关于我们
微信公众号“爬虫俱乐部”分享实用的stata命令,欢迎转载、打赏。爬虫俱乐部是由李春涛教授领导下的研究生及本科生组成的大数据分析和数据挖掘团队。
此外,欢迎大家踊跃投稿,介绍一些关于stata的数据处理和分析技巧。
投稿邮箱:xueyuan19920310@163.com
投稿要求:
1)必须原创,禁止抄袭;
2)必须准确,详细,有例子,有截图;
注意事项:
1)所有投稿都会经过本公众号运营团队成员的审核,审核通过才可录用,一经录用,会在该推文里为作者署名,并有赏金分成。
2)邮件请注明投稿,邮件名称为“投稿”+“推文名称”。
3)应广大读者要求,现开通有偿问答服务,如果大家遇到关于stata分析数据的问题,可以在公众号中提出,只需支付少量赏金,我们会在后期的推文里给予解答。
欢迎关注爬虫俱乐部
微信扫一扫
关注该公众号