数据读入系列之命令infix介绍
本文作者:周聪聪
本文编辑:杨长青
技术总编:高金凤
好消息!!!爬虫俱乐部将于2019年5月2日至4日在武汉举行Stata编程技术五一训练营,此次采用理论与案例相结合的方式,旨在帮助大家熟悉Stata数据分析技巧,能够通过编程读取不同类型的数据源、实现复杂数据合并、清洗的程序化,并且熟悉Stata核心的爬虫技术。
详细培训大纲及报名方式,请点击文末阅读原文呦~
今天我们为大家介绍一个数据读入命令infix,该命令主要用来读取具有固定宽度的文本数据。下面,我们以一行、多行排列的变量,以及网页源代码的读入来介绍如何使用infix命令。
(1) 变量为一行排列
当变量为单行排列时,我们可按照变量值所占的列读取数据。下面以数据集"dates.txt"为例具体介绍。如下图所示,在"dates.txt"文档中,第1-4列对应变量"name"的内容,第6-17列对应变量"bday"的内容。
我们可以通过如下命令读取"dates.txt"中的数据:
clear
cd D:/数据读入
infix str name 1-4 str bday 6-17 using dates.txt,clear //用"str"指明变量"name","bday"为字符型变量,并在变量名"name","bday"后分别加入"1-4", "6-17"来指明变量值所占的列数
br
这样,数据就被完整准确地读入Stata中了。
(2)变量为多行排列
当变量为多行排列时,我们按照变量值所处的行数及所占的列来读取数据。以数据集"dates2.txt"为例进行介绍:
下图为"dates2.txt"文档的具体内容。可以看到,第一行中第1-4列为变量"name"的内容,第6-17列为变量"bday"的内容;第二行中第1-2列为变量"age"的取值。
我们可以通过如下命令读取数据:
clear
cd D:/数据读入
infix 1:str name 1-4 str bday 6-17 2: age 1-2 using dates2.txt,clear //使用"1:"指明变量"name"、"bday"在文本文档的第一行;使用"2: "指明"age"在文本文档的第二行
br
如此,变量为多行排列时的数据读入工作就完成了。
(3)网络爬虫案例的数据读入
除了以上常用用法外,infix还经常被用于网络爬虫后的数据读入。下面,我们就通过网络爬虫例子为大家展示:
首先,使用copy命令将新浪财经网站上股票代码为“60900”的长江电力公司公告信息的网页源代码爬取下来,存入temp.txt中。之后使用infix命令读入。
clear
cd D:/数据读入
copy "http://vip.stock.finance.sina.com.cn/corp/go.php/vCB_AllBulletin/stockid/600900.phtml" temp.txt, replace
infix strL v 1-100000 using temp.txt, clear //一般情况下爬取的网页源代码长度较长,我们无法确定要读入的长度是多少。所以,在这里使用"strL"和长度"1-100000"定义变量v
可以看到,数据导入到Stata中,无法正常显示,即出现乱码问题。在这里,我们可用下面一行命令解决乱码问题,更多乱码问题及解决办法还可以参考推文《乱码问题解决之unicode convertfile》:
replace v = ustrfrom(v, "gb18030", 1)
然后,查看网页源代码,保留含有公司公告信息所在行:
keep if index(v, "</a><br>")
split v, p("</a><br>")
drop v
sxpose, clear
drop in -1
split _var1, p(`" <a target='_blank' href='"' `"'>"')
drop _var1 _var12
rename _all (date title)
至此,数据就整理完毕了。
以上就是关于infix命令的介绍。想了解更多数据读入命令,可阅读往期推文《数据读入系列之 import delimited 介绍》、《试试用file read读入外部数据!》等,继续你的数据读入之旅吧!
对爬虫俱乐部的推文累计打赏超过1000元我们即可给您开具发票,发票类别为“咨询费”。用心做事,只为做您更贴心的小爬虫!
往期推文推荐
关于我们
微信公众号“爬虫俱乐部”分享实用的stata命令,欢迎转载、打赏。爬虫俱乐部是由李春涛教授领导下的研究生及本科生组成的大数据分析和数据挖掘团队。
此外,欢迎大家踊跃投稿,介绍一些关于stata的数据处理和分析技巧。
投稿邮箱:statatraining@163.com
投稿要求:
1)必须原创,禁止抄袭;
2)必须准确,详细,有例子,有截图;
注意事项:
1)所有投稿都会经过本公众号运营团队成员的审核,审核通过才可录用,一经录用,会在该推文里为作者署名,并有赏金分成。
2)邮件请注明投稿,邮件名称为“投稿+推文名称”。
3)应广大读者要求,现开通有偿问答服务,如果大家遇到关于stata分析数据的问题,可以在公众号中提出,只需支付少量赏金,我们会在后期的推文里给予解答。