本文作者:张 宇
本文编辑:杨长青
技术总编:司海涛
有问题,不要怕!访问
http://www.wuhanstring.com/uploads/5_aboutus/爬虫俱乐部-用户问题登记表.docx (复制到浏览器中)下载爬虫俱乐部用户问题登记表并按要求填写后发送至邮箱statatraining@163.com,我们会及时为您解答哟~
爬虫俱乐部的github主站正式上线了!我们的网站地址是:https://stata-club.github.io,粉丝们可以通过该网站访问过去的推文哟~
爬虫俱乐部隆重推出数据定制及处理业务,您有任何网页数据获取及处理方面的难题,请发邮件至我们邮箱statatraining@163.com,届时会有俱乐部高级会员为您排忧解难!
邮编,是一个地区的标签,也是一座城市的记忆;它也可以将我们对亲人的思念准确传递到亲人的手中。
但是,如果你手中的邮编是错误的,那你的“重要文件”就会被送到别人手里啦!小编收集了美国马萨诸塞州的部分邮编,但这些邮编的格式不规范,如果想使用它们作为与亲友沟通的桥梁,需要用Stata对这些邮编进行处理之后再使用。
此篇推文采用多种方式对这些邮编数据进行处理,希望大家在日后遇到类似问题时,都能够迎刃而解。
我们录入部分邮编数据作为例子:
clear
input str10 zip_code
"2140"
"2148"
"02121"
"2151"
"02121-2936"
end
结果如下:

之所以说其格式不规范,是因为:(1)马萨诸塞州ZIP编号的首码为0,但是上图数据中的四位数丢失了首码0,因此我们要在四位数字前边加上数字0。(2)最基本的ZIP编号包括五个号码,随后增加了四个号码,使邮件可以更精确地传送到目的地。增加号码后的ZIP编号称为"ZIP+4",上图中第五个观测值即为这种格式。但是我们有时只需要前五位数,所以要将"ZIP+4"中的ZIP提取出来。
1.字符串相加和substr()函数
substr()函数的语法如下:
substr(s,n1,n2)
使用这个函数,可以帮助我们从字符串s的第n1个字节处开始,提取字节长度为n2的子字符串。
针对样例数据,我们先将四位数前边加上字符串“0”,再将剩余数据的前五个字符串提取出来。程序如下:
gen zip1 = "0" + zip_code if length(zip_code) == 4replace zip1 = substr(zip_code,1,5) if length(zip_code) >= 5list

上述程序成功将数据整理成我们需要的数据格式。
2.字符串相加和cond()函数
cond()函数的语法如下:
cond(x,a,b[,c])
x是一个判断语句,如果x为真且不是缺失值,函数返回a的值;如果x为假,函数返回b的值;如果x为缺失值,函数返回c的值。当参数c不存在时,x为真或是缺失值时函数都返回a的值。例如:
di cond(.,30,40,50)

那么,如何使用cond()函数处理我们的数据呢?首先提取全部数据的前五个字符,这样一来就把增加的四个号码剔除了。其次,使用cond()函数判断新变量中的字符串长度是否为4,如果是的话就在前边加上0。程序如下:
gen zip2 = substr(zip_code,1,5)
replace zip2 = cond(length(zip2) ==4,"0" + zip2,zip2)
list

3.使用正则表达式
首先提取字符串前五或前四个字符,其次将新变量中的字符串长度4的字符前加上0。程序如下:
gen zip3 = ustrregexs(0) if ustrregexm(zip_code,"^\d{4,5}")
replace zip3 = "0" + zip3 if length(zip3) == 4
list
结果如下:

显然,上述程序的结果和前两种方法结果相同,通过这三种方法,我们成功地将数据整理成所需要的格式。
邮编承载的是那一封封书信,它把关怀和问候如期送到亲人的手中。如果把信比喻成小船,那么邮编就是那船上的桨,将书信送到亲友的指尖。烽火连三月,家书抵万金!愿春节后的我们,在不远的将来,能够与生命中最重要的人再团聚!
爬虫俱乐部是您身边的科研助手,能够为您在数据处理、实证研究中提供帮助。承蒙近四万粉丝的支持与厚爱,我们在腾讯课堂推出了网络视频课程,专注于数据整理、网络爬虫、循环命令编制和结果输出…李老师及团队精彩地讲解,深入浅出,注重案例与实战,让您更加快速高效地掌握Stata技巧及数据处理的精髓,而且可以无限次重复观看,在原有课程基础上已上传了全新的内容!百分百好评,简单易学,一个月让您从入门到精通。绝对物超所值!观看学习网址:
https://ke.qq.com/course/286526?tuin=1b60b462,
敬请关注!
对爬虫俱乐部的推文累计打赏超过1000元我们即可给您开具发票,发票类别为“咨询费”。用心做事,只为做您更贴心的小爬虫!
往期推文推荐
关于我们
微信公众号“爬虫俱乐部”分享实用的stata命令,欢迎转载、打赏。爬虫俱乐部是由李春涛教授领导下的研究生及本科生组成的大数据分析和数据挖掘团队。
此外,欢迎大家踊跃投稿,介绍一些关于stata的数据处理和分析技巧。
投稿邮箱:statatraining@163.com
投稿要求:
1)必须原创,禁止抄袭;
2)必须准确,详细,有例子,有截图;
注意事项:
1)所有投稿都会经过本公众号运营团队成员的审核,审核通过才可录用,一经录用,会在该推文里为作者署名,并有赏金分成。
2)邮件请注明投稿,邮件名称为“投稿+推文名称”。
3)应广大读者要求,现开通有偿问答服务,如果大家遇到关于stata分析数据的问题,可以在公众号中提出,只需支付少量赏金,我们会在后期的推文里给予解答。


