爬虫俱乐部之前推出的线下培训,得到了各位老师的一致好评。为了更加方便大家学习,满足更多Stata用户的学习需求,爬虫俱乐部已隆重推出在线直播课程,请大家奔走相告!课程报名链接:https://ke.qq.com/course/286526#tuin=9735fd2d,详情见推文《爬虫俱乐部隆重推出网上直播课程第一季》
有问题,不要怕!点击推文底部“阅读原文”下载爬虫俱乐部用户问题登记表并按要求填写后发送至邮箱statatraining@163.com,我们会及时为您解答哟~
喜大普奔~爬虫俱乐部的github主站正式上线了!我们的网站地址是:https://stata-club.github.io,粉丝们可以通过该网站访问过去的推文哟~
好消息:爬虫俱乐部即将推出研究助理供需平台,如果您需要招聘研究助理(Research Assistant or Research Associate),可以将您的需求通过我们的公众号发布;如果您想成为一个RA,可以将您的简历发给我们,进入我们的研究助理数据库。帮我们写优质的推文可以提升您被知名教授雇用的胜算呀!
在之前的推文中我们介绍了.mmat 格式、dta格式和txt格式的数据导入Mata。今天我们为大家介绍Excel文件导入Mata的方法。
首先,我们生成一个excel文件:
sysuse auto,clear
export excel using d:\mywork5,replace
接着,我们将文件mywork5.xls导入Mata:
mata
b = xl()
b.load_book ("d:\mywork5.xls")
b.set_sheet("Sheet1")
val1 = b.get_string(1,1)
val1
val2 = b.get_number(1,2)
val2
cols = (2,6)
cells1 = b.get_string(1,cols)
cells1
rows = (1,3)
cols = (2,4)
cells2 = b.get_number(rows,cols)
cells2
end
注:
xl():Mata中导入Excel文件的类函数
load_book:加载Excel文件
set_sheet:指定所要选择的Excel子表
get_string(1,1):读入第一行第一列的字符
get_number(1,2):读入第一行第二列的数值
rows = (n,m):选定的行数是n-m行
cols = (n,m):选定的列数是n-m列
得到:



可以看到,以上程序能实现我们提取单个观测值或是某一范围数值的目标。
那如果我们想批量导入多个excel文件,该如何实现呢?现在我们生成3个excel文件,每个excel文件中包含2个子表,每个表中有3个变量、10个观测值,程序如下:
clear
cap mkdir d:/sample/
cd d:/sample
sysuse auto,clear
keep price mpg rep78
keep in 1/10
forvalue i = 1(1)3 {
forvalue j = 1(1)2{
export excel using temp`i'.xls,sheet(Sheet`j')
}
}
接下来,我们将这3个excel表格导入Mata,程序如下:
mata
mata clear
b = xl()
cells=J(1, 3, NULL) //生成一个1行3列的空矩阵cells
for(i=1;i<=3;i++) { //循环读入3个excel文件
b.load_book (sprintf("d:/sample/temp%g.xls",i)) //sprintf()函数用于格式化字符串的写法,%g这里是用来把1,2,3分别赋到temp后,使其变成temp1,temp2,temp3
cells[i]=&J(1,2, NULL) //生成一个指向1行2列空矩阵的指针cells[i]
sheets = b.get_sheets() //提取excel文件中的子表个数
for(j=1;j<=rows(sheets);j++) { //循环读入excel文件中的子表
b.set_sheet(sheets[j])
(*cells[i])[j] = &b.get_number((1,10),(1,3)) //指针的相关内容详见推文《浩如烟海,细若指针》。其中,*cells[i]=* &J(1,2, NULL)= J(1,2, NULL),*cells[i])[j]表示指向J(1,2, NULL)的第j列,则这一行命令表示是把第i个表格中第j个sheet的1-10行1-3列里的内容储存到*cells[i])[j]中,当然这里我们知道变量个数和观测值个数是3列10行,如果不知道可以设置为excel文件的最大行列数为256
}
}
M = (*(*cells[1])[1]\*(*cells[1])[2]\*(*cells[2])[1]\*(*cells[2])[2]\*(*cells[3])[1]\*(*cells[3])[2]) //(*(*cells[1])[1]表示第1个表格中第1个sheet的1-10行1-3列里的内容,\表示纵向拼接。
M
end
得到:

可以看到,3个Excel文件中6个子表合并完成,共有60个观测值。
注:此推文中的图片及封面(除操作部分的)均来源于网络!如有雷同,纯属巧合!以上就是今天给大家分享的内容了,说得好就赏个铜板呗!有钱的捧个钱场,有人的捧个人场~。另外,我们开通了苹果手机打赏通道,只要扫描下方的二维码,就可以打赏啦!
应广大粉丝要求,爬虫俱乐部的推文公众号打赏功能可以开发票啦,累计打赏超过1000元我们即可给您开具发票,发票类别为“咨询费”。用心做事,只为做您更贴心的小爬虫。第一批发票已经寄到各位小主的手中,大家快来给小爬虫打赏呀~
-文字编辑:吴晓蔓-
-技术总编:刘贝贝-
往期推文推荐:
2.hello,MySQL--Stata连接MySQL数据库
3.hello,MySQL--odbcload读取MySQL数据
关于我们
微信公众号“爬虫俱乐部”分享实用的stata命令,欢迎转载、打赏。爬虫俱乐部是由李春涛教授领导下的研究生及本科生组成的大数据分析和数据挖掘团队。
此外,欢迎大家踊跃投稿,介绍一些关于stata的数据处理和分析技巧。
投稿邮箱:statatraining@163.com
投稿要求:
1)必须原创,禁止抄袭;
2)必须准确,详细,有例子,有截图;
注意事项:
1)所有投稿都会经过本公众号运营团队成员的审核,审核通过才可录用,一经录用,会在该推文里为作者署名,并有赏金分成。
2)邮件请注明投稿,邮件名称为“投稿”+“推文名称”。
3)应广大读者要求,现开通有偿问答服务,如果大家遇到关于stata分析数据的问题,可以在公众号中提出,只需支付少量赏金,我们会在后期的推文里给予解答。


