专栏名称: 爬虫俱乐部
Stata技术控,编程技术咨询,数据讨论与分享,编程和实证培训。
目录
相关文章推荐
51好读  ›  专栏  ›  爬虫俱乐部

没有“最懒”,只有“更懒”!findname祝你轻松愉快过新年!

爬虫俱乐部  · 公众号  ·  · 2018-02-15 10:31

正文


有问题,不要怕!点击推文底部“阅读原文”下载爬虫俱乐部用户问题登记表并按要求填写后发送至邮箱 [email protected] ,我们会及时为您解答哟~ 喜大普奔~爬虫俱乐部的 github 主站正式 上线了!我们的网站地址是: https://stata-club.github.io ,粉丝们可以通过该网站访问过去的推文哟~


好消息 :爬虫俱乐部即将推出研究助理供需平台,如果您需要招聘研究助理(Research Assistant or Research Associate),可以将您的需求通过我们的公众号发布;如果您想成为一个RA,可以将您的简历发给我们,进入我们的研究助理数据库。帮我们写优质的推文可以提升您被知名教授雇用的胜算呀!

前几天,在小女子公众号里发布了一篇《世界银行数据批量下载,暗含小心机呦!》意外引得关注,哈哈!看来在摸索如何快速下载世界银行数据的道路上,我并不孤单!但是,上次方法下载后的数据距离直接使用,还隔了一小步!今天就是为了跨越这一小步,实现从数据的下载到直接使用!

回顾一下世界银行数据下载的方法:

第一步:从世行网站下载中文or英文版的excel表格,获取国家或者指标的名称。我介绍的时候,推荐导入sheet2,当然导入sheet1也是可以的,只不过需要多几步清理数据,但是可以得到 countrycode

import excel using e:\世行数据\世界发展指标.xlsx, sheet("Definition and Source") first case(lower) clear // 导入数据

第二步:使用一个小循环,让stata自行下载每个变量,并分别保存成一个.dta文件

levelsof code,clean local(var)

foreach x of local var {

wbopendata,indicator("`x'") clear long year(year1960-2016)

save wb`x'.dta,replace

}

第三步:openall后,借助excel批量添加标签和重命名。

保存数据后,开开心心的准备与其它数据合并,这时候问题来了!!!

使用openall后,你会发现数据真的是“拼接”起来,一个国家一个变量对应一个时间序列。这是由于下载的是每一个变量的数据,那么合并的时候,一行观测值只包含一个变量的一年的数据,所以合并后的数据,对于每个公司每个年份就有多个观测值。我们以1965年和1966年Austria的数据为例!如下图:

但是,我们需要的是让每一个变量的数据在同一行观测值中,并分别对应一个年份。

处理思路:按照 countrycode year 进行分组,然后用 carryforward 进行填充缺失值,关于 carryforward 的用法在推文 carryforward——填充缺失值 有详细的介绍。填充之后,在每一组的最后一行,就对应了每一个变量的值,最后保留最后一行即可。

第四步:清理数据,分组填充再保留最后一行!

foreach var of varlist rex-gdp_cus{

bysort countrycode year: carryforward `var',replace

}

bysort countrycode year : keep if _n == _N //按照国家和年份分组,保留最后一行数据,得到我们想要的面板数据!

sort countrycode year

save wdi.dta,replace

第五步:删除之前下载的一个一个变量的表

fs wb?*.dta

foreach f in `r(files)' {

rm `f'

}

划重点!!!

虽然只需要定义变量的范围,我们就可以批量处理数据。但是现实是,我们往往无法一次下载所有我们所需要的指标,需要多次下载数据时,我们要不断修改变量名。尽管只有两个,那也是体力活啊!!可否不需要输入变量名,直接使用一个可以得到所需变量名的返回值的神器。嗯,没有最懒,只有更懒!这个世界是由懒人推动的!

寻寻觅觅,终于找到了—— findname !

findname 可以列出符合某个模式或者属性的变量的名称,并且这些变量名被放到返回值r(varlist)中,方便在后边的程序中调用。通过 Help findname ,我们可以找到findname的用法:

findname [varlist] [if] [in] [, options]

options:包括四大类 control,display,Selection by data types, values and formats Selection by characteristics

举例:

findname, type(int/numeric/string) 整数型、数值型和字符型的变量

findname, varl(*weight* *Weight*) 数值标签中含有“weight或Weight”

findname, varl("*some phrase*") 数值标签中含有某些文本

findname, any(@ < 0) 含有负值的变量

篇幅有限,更多精彩内容请自行查阅,哈哈!

回到openall之后的第四步! 由于下载的数据中既有 countryname , region string 变量,也有数值型变量。我们需要批量处理的都是数值型变量,因此,我们只选择 type numeric 的变量,结果返回到 r(varlist) 中。然后借用前面的循环,也可得到干干净净、清清爽爽的世界银行数据!

具体如下:

findname,type(numeric) //找到是数值型的变量名称

foreach v of varlist `r(varlist)'{

bysort countrycode year: carryforward `v',replace

}

不需要定义变量名,感觉又轻松了很多!哈哈!如有小伙伴有更简单的方法,欢迎分享!

总结一下三大法宝: levelsof --- findname --- fs ,分别找到变量值 r(levels) 、变量名 r(varlist) 和文件名 r(files) !! 用“最懒”的方法,得到最完美的数据!

最后,提前祝大家新年快乐!

喜欢不?喜欢请给压岁钱啦!O(∩_∩)O哈哈~

以上就是今天给大家分享的内容了,说得好就赏个铜板呗!有钱的捧个钱场,有人的捧个人场~。另外,我们开通了苹果手机打赏通道,只要扫描下方的二维码,就可以打赏啦!

应广大粉丝要求,爬虫俱乐部的推文公众号打赏功能可以开发票啦,累计打赏超过1000元我们即可给您开具发票,发票类别为“咨询费”。用心做事,只为做您更贴心的小爬虫。第一批发票已经寄到各位小主的手中,大家快来给小爬虫打赏呀~

文字编辑/赵宇亮

技术总编/刘贝贝


往期推文推荐:

1. 高校学术大神:你的导师上榜了吗?

2.中国高校财经、管理与综合类期刊灌水排行榜

3. 命令 sum2docx 输出统计量表到 docx 文件

4. reg2docx 报告你的实证结果吧!

5. 爬虫俱乐部又出新命令了 ——wordconvert 转换你的 word 文件

6. putdocx+wordconvert— 将实证结果输出到 Word .docx )文档

7. Stata 15 Markdown—— 没有做不到,只有想不到!

8.矩阵和宏的故事

9.







请到「今天看啥」查看全文