01
月
11
日
周
四
有问题,不要怕!点击推文底部“阅读原文”下载爬虫俱乐部用户问题登记表并按要求填写后发送至邮箱statatraining@163.com,我们会及时为您解答哟~
喜大普奔~爬虫俱乐部的github主站正式上线了!我们的网站地址是:https://stata-club.github.io,粉丝们可以通过该网站访问过去的推文哟~
大家好,前段时间,有位读者向我们爬虫俱乐部寻求帮助,希望我们能够帮他处理一些不规则的数据。截图如下(部分数据):
这个数据的特点是:A 列是公司代码,从第C列开始,从左到右每一列每17行对应着A列每一家公司从2001到2017年某个指标的具体数值。例如代码为130037的公司对应 的2001-2017年的数据为C2-C18,公司130042对应的数据为D2-D18,以此类推。而这位读者的要求是将数据整合成两列,第一列是公司 代码,第二列是每个公司对应的每一年的数据(也就是说每一家公司对应17行数据)。下图即为我们所需要的数据格式:
下面就由小编告诉大家如何整理这种类型的数据,整体思路是:
首先每个股票代码对应的2001-2017年的数据分布在不同列中,并且顺序是从左到右对应相应的股票代码。因为原始数据中每个股票代码为一行观测值,对应的年度数据有17行观测值,因此我们的整体思路是保留股票代码并扩展17倍,保存成一个dta文件。
然后将后边的年度数据由多列变为一列使其和扩展后的股票代码进行合并,但是又有一个问题,由于直接由多列变一列会导致顺序错乱,所以我们需要每次保留17行数据,然后再进行多列变一列的转换,并保存为另外一个dta文件。
最后将两个dta文件进行横向拼接。具体程序如下:
clear
cap mkdir d:/推文
cd d:/推文
import excel using e:/推文数据.xlsx,clear firstrow
keep AcqDatastreamCode //只保留公司代码
gen num = _n //表示有多少家公司
expand 17 //扩大17倍
sort num
gen num1 = _n
save stkcd,replace
整理后的数据如下:
接下来整理数据:
import excel using e:/推文数据,clear firstrow
drop AcqDatastreamCode //删除股票代码
drop if B == . //删除缺失值
forvalue i = 1(17)`=_N' { //i=1,18,35……
preserve
keep in `i'/`=`i'+16' //每次保存17行数据
stack ERROR-ANJ, into(v) clear //stack命令可以使多列变一列
drop if v == ""
save `i',replace
restore
}
clear
fs *.dta
foreach c in `r(files)' {
append using `c' //将变成一列的多个数据纵向拼接
}
drop _stack
gen num = int((_n-1)/17) + 1 //分组,每17行数据为一组
sort num
gen num1 = _n //num、num1为合并依据
save data,replace
得到如下数据:
最后我们需要做的就是将公司代码与数据一一对应起来,可以根据变量num、num1将数据data与数据stkcd横向拼接起来。程序如下:
merge 1:1 num num1 using stkcd
keep if _m == 3
drop num num1 _m
save final,replace
这样就可以得到我们所需要的数据啦~如果泥萌有更好的办法也欢迎跟小编交流哦~
注:此推文中的图片及封面(除操作部分的)均来源于网络!如有雷同,纯属巧合!
以上就是今天给大家分享的内容了,说得好就赏个铜板呗!有钱的捧个钱场,有人的捧个人场~。另外,我们开通了苹果手机打赏通道,只要扫描下方的二维码,就可以打赏啦!
应广大粉丝要求,爬虫俱乐部的推文公众号打赏功能可以开发票啦,累计打赏超过1000元我们即可给您开具发票,发票类别为“咨询费”。用心做事,只为做您更贴心的小爬虫。第一批发票已经寄到各位小主的手中,大家快来给小爬虫打赏呀~
文字编辑/徐露露
技术总编/刘贝贝
往期推文推荐:
5.爬虫俱乐部又出新命令了——wordconvert转换你的word文件
6.putdocx+wordconvert—将实证结果输出到Word(.docx)文档
关于我们
微信公众号“爬虫俱乐部”分享实用的stata命令,欢迎转载、打赏。爬虫俱乐部是由李春涛教授领导下的研究生及本科生组成的大数据分析和数据挖掘团队。
此外,欢迎大家踊跃投稿,介绍一些关于stata的数据处理和分析技巧。
投稿邮箱:statatraining@163.com
投稿要求:
1)必须原创,禁止抄袭;
2)必须准确,详细,有例子,有截图;
注意事项:
1)所有投稿都会经过本公众号运营团队成员的审核,审核通过才可录用,一经录用,会在该推文里为作者署名,并有赏金分成。
2)邮件请注明投稿,邮件名称为“投稿”+“推文名称”。
3)应广大读者要求,现开通有偿问答服务,如果大家遇到关于stata分析数据的问题,可以在公众号中提出,只需支付少量赏金,我们会在后期的推文里给予解答。
欢迎关注爬虫俱乐部
微信扫一扫
关注该公众号