【有问必答】美女老师想知道的都在这里

2016-09-28 宝宝 爬虫俱乐部 爬虫俱乐部

最近,小编收到湖南大学美女苏老师的咨询,苏老师希望将两个数据进行横向合并。小编最乐意给读者解答问题啦,所以今天的推文就让小编通过stata这个神器来帮忙解决这个问题,帅哥美女快来一起涨姿势。

首先笔者苏老师给的两组数据进行观察,第一组数据两个指标分别为是cityhospital


第二组数据包含的指标分别有city_code  city_label  total_pop  match_city


如何将这两组数据进行横向匹配?那首先需要对两组数据分别进行处理,第一步我们需要将第一组的数据导入Stata然后进行数据整理

clear

set more off

cd "D:\爬虫俱乐部"

use hospital.dta, clear

通过观察我们发现第一组数据中city指标中有数字和点这样的组合例如


所以我们使用正则表达式的替换函数regexr()

replace city = regexr(city,"[0-9]+\.","")

其中[0-9]+是用来匹配数字

\.是用来匹配点符号

通过命令可以将数字和点这样组合替换为没有数字和点的组合


如果我们将读入到stata14中就会发现字符型数据变成了乱码

clear

set more off

cd "D:\爬虫俱乐部”

use hospital.dta, clear


此时我们就需要借用stata14中的unicode命令来完成转码,这个命令有两个条件:第一,使用该命令之前,需要清空数据;第二,我们转码的文件必须是在当前工作路径中的文件。

在转码前我们需要设置要转换的文件编码,首先通过help encoding来查看可以转换的编码,然后用unicode encoding set来进行设置。这里我们需要设置gb18030,进行转码,通过命令:

unicode encoding set gb18030

接着我们使用unicode translate来解决这个问题:

unicode translate hospital.dta,transutf8

use hospital.dta, clear


然后通过stata14特有的ustrregexra命令,可以将数字和点这样的组合替换为没有数字和点的组合,结果显示如下:

replace city =ustrregexra(city,"\d+\.","")


这样就和stata13中替换函数regexr()输出结果相同了。如果有读者对转码和stata14字符串函数的提取和替换以及正则表达式的应用感兴趣,在我们公众号之前的推文中都有过详细介绍希望之前小推文中的内容能更有助于你们理解。

接下来stata13stata14处理的过程一样,通过命令sort city可以将数据按照city排序:

save hospital.dta,replace

然后命名hospital格式为stata格式将其保存到设定路径中为备用

第二步我们对第二组数据进行处理同样,我们先第二组数据导入stata

use pop.dta, clear


通过观察我们不难发现第二组数据city_label与第一组city所对应的数据相同但变量名称不一致为了能让stata大神准确识别,我们city_label变量名称进行重命名

rename city_label city

然后对city进行排序

sort city

在显示排序结果中,笔者发现第一行数据为缺失值。


所以我们需要使用命令将第一行drop

drop in 1

最后就是见证奇迹的时刻,我们通过merge命令进行拼接:

merge city using hospital.dta


这样我们成功将两个数据横向合并啦,美女苏老师提到的数据横向合并问题就轻松解决了。遇到同样问题的小伙伴可以试一试推文中的方法,同时也希望有更多读者参加我们的有问必答环节,爬虫俱乐部的我们会使出洪荒之力来给你们解决各种问题哒~还在观望什么,不要998,只要关注“爬虫俱乐部”公众号就能把实用的stata命令带回家~


我们团队原来的微信公众号是“数据处理援助中心”,现在正式搬家到“爬虫俱乐部”,欢迎关注。新的公众号开始,我们推出有问必答栏目,对您提出的问题,我们会尽力回答,并通过推文的形式进行发布。我们也欢迎各位粉丝向公众号投稿。

(编辑 @徐苾雯)


欢迎大家踊跃投稿,介绍一些关于stata的数据处理和分析技巧。

投稿邮箱:xueyuan19920310@163.com

投稿要求

1)必须原创,禁止抄袭;

2)必须准确,详细,有例子,有截图;

注意事项

1)所有投稿都会经过本公众号运营团队成员的审核,审核通过才可录用,一经录用,会在该推文里为作者署名。

2)邮件请注明投稿,邮件名称为“投稿”+“推文名称”。

3)如果大家遇到关于stata处理分析数据的问题,也可以给该邮箱写邮件,邮件名称为“提问”+“问题名称或者关键词”,我们会在后期的推文里给予解答。


长按二维码关注公众号

微信扫一扫
关注该公众号