关注 | 爬虫俱乐部
有问题,不要怕!点击推文底部“阅读原文”下载爬虫俱乐部用户问题登记表并按要求填写后发送至邮箱statatraining@163.com,我们会及时为您解答哟~
在之前的推文中我们提到过一个数据处理的神器:post命令,详情可见推文《免费的股价同步性,一片片从邮局寄来》,今天爬虫君就以如何获取中国上市公司上一个交易日的收盘价这个案例来说明如何使用post命令输出数据。
post命令
post命令是一个整理数据的法宝。我们可以把post输出数据的过程理解为定义邮件,寄邮件和收邮件。
(1)postfile:定义寄邮件的邮局名,然后定义邮件中包含哪些变量,每个变量的存储格式,最后定义接收地址。
(2)post:寄邮件,每次寄邮件都会按照刚刚定义的邮件内容进行邮寄,每寄出一封邮件,外部数据就会增加一行。
(3)postclose:关闭邮局。如果不使用postclose,则无法打开外部数据。
简单了解了post的相关命令之后,让我们来举个例子看一下吧~
clear
capture postclose mypost //避免因相同的post邮局系统没有关闭而出现错误。
postfile mypost str20 city str12 time temperature using E:/爬虫.dta, replace
在这里定义寄邮件的邮局是mypost,邮件的内容包含三个字段分别是长度为20的字符型变量city,里面装的是城市名;长度为12的字符型变量time, 里面装的是时间;数值型变量temperature,里面装的是温度。接收邮件的地址是E:/爬虫.dta,replace表示的是如果文件已存在直接覆盖已存在的文件。
post mypost ("武汉") ("8:46") (12)
post mypost ("香港") ("18:46") (33)
先寄第一封邮件,邮件的内容是:武汉、 8:46 、12,邮寄成功后爬虫.dta中的数据会增加一行。再寄第二封邮件,邮件的内容是香港 、18:46 、33 ,邮寄成功后爬虫.dta中的数据会再增加一行。注意如果输入的是字符型必须要用英文状态下的“ ”,所有的括号都是在英文状态下的,并且每个括号之间都必须有空格,否则stata会将其辨认为函数。
如果括号之间没有空格,stata就会报错哦!如下图:
postclose mypost
use E:/爬虫.dta, clear
最后输出结果如下:
以两家公司为例
了解了post命令后我们言归正传,看看如何用它输出中国上市公司上一个交易日的收盘价。注意了,程序中需要的两个命令cntrade和cnstock是外部命令可以通过ssc install cntrade和ssc install cnstock进行安装。
以万科和长江电力为例,这两个公司的股票代码是000002和600900
cntrade 2 //获得万科的股票历史交易数据
我们获取的数据是按时间的先后顺序排列的,要获取上一个交易日的收盘价信息,只需要保留最后一行:
keep in -1
接下来,我们来看一看要邮寄的信息:stkcd(股票代码)、date(日期)、clsprc(收盘价)。这样我们就可以在数据整理之前先定义邮件,设定好邮件接收地址,即E:/mypost.dta。程序如下:
clear all
cap mkdir E:/收盘价
cd E:/收盘价
capture postclose mypost
postfile mypost stkcd date clsprc using E:/mypost.dta, replace
foreach stk in 2 600900{ //使用foreach对两家公司的股票代码做循环
cntrade `stk'
keep in -1
post mypost (`stk') (date[1]) (clsprc[1]) //将我们循环得到的万科和长江电力的数据按照定义的格式邮寄到我们设定好的地址
}
postclose mypost //股票收盘价数据寄出后,我们关闭邮局即可
use E:/mypost.dta, clear
format date %dCY-N-D
输出的结果如下:
这样就得到了万科和长江电力两家公司在上一个交易日的收盘价,是不是很easy。这样前期所有的准备工作就做好了,我们来上大菜!
所有上市公司
首先获取中国所有上市公司的股票代码,使用这些股票代码来做循环:
cnstock all
为了运行方便,随机选取十只股票:
sample 10, count
levelsof stkcd //得到股票代码返回值
return list //查看返回值
股票代码被保存在名为levels的返回值中。
接下来,对十只股票代码进行循环:
foreach stk in`r(levels)'{
cntrade `stk'
}
完整的程序如下:
clear all
cap mkdir E:/收盘价
cd E:/收盘价
capture postclose mypost
postfile mypost stkcd date clsprc using E:/mypost.dta, replace
cnstock all
sample 10, count
levelsof stkcd
foreach stk in`r(levels)'{
cntrade `stk'
keep in -1
post mypost (`stk') (date[1]) (clsprc[1])
}
postclose mypost
use E:/mypost.dta, clear
format date %dCY-N-D
这样我们的最终程序就完成了,屏幕上清晰的输出了我们想要的结果啦!
还不懂,戳视频看看呗:)
以上就是今天给大家分享的内容了,说得好就赏个铜板呗!有钱的捧个钱场,有人的捧个人场~。另外,我们开通了苹果手机打赏通道,只要扫描下方的二维码,就可以打赏啦!
应广大粉丝要求,爬虫俱乐部的推文公众号打赏功能可以开发票啦,累计打赏超过1000元我们即可给您开具发票,发票类别为“咨询费”。用心做事,只为做您更贴心的小爬虫。第一批发票已经寄到各位小主的手中,大家快来给小爬虫打赏呀~
文字编辑:王凯丽
技术总编:刘贝贝
往期推文推荐:
5.爬虫俱乐部又出新命令了——wordconvert转换你的word文件
6.putdocx+wordconvert—将实证结果输出到Word(.docx)文档
7.Stata 15之Markdown——没有做不到,只有想不到!
关于我们
微信公众号“爬虫俱乐部”分享实用的stata命令,欢迎转载、打赏。爬虫俱乐部是由李春涛教授领导下的研究生及本科生组成的大数据分析和数据挖掘团队。
此外,欢迎大家踊跃投稿,介绍一些关于stata的数据处理和分析技巧。
投稿邮箱:statatraining@163.com
投稿要求:
1)必须原创,禁止抄袭;
2)必须准确,详细,有例子,有截图;
注意事项:
1)所有投稿都会经过本公众号运营团队成员的审核,审核通过才可录用,一经录用,会在该推文里为作者署名,并有赏金分成。
2)邮件请注明投稿,邮件名称为“投稿”+“推文名称”。
3)应广大读者要求,现开通有偿问答服务,如果大家遇到关于stata分析数据的问题,可以在公众号中提出,只需支付少量赏金,我们会在后期的推文里给予解答。
欢迎关注爬虫俱乐部
微信扫一扫
关注该公众号