把格式不规范的数据进行规整是我们经常要面对的问题。下图为一组数据,可以发现在“学历 学位”和“毕业院校、专业”出现了格式不规范问题,在每个老师所占的一行中又出现了两小行,我们的目的是把这个数据变成每个老师一行的格式。具体怎么做,且看爬虫君抛砖引玉。
1
第一种方法是直接生成新变量,然后保留奇数列即可,过程如下:
首先读入数据:
clear
set more off
cd d:/mydata
import excel using teacher.xlsx,first
然后生成新变量:
gen 最高学历=E[_n+1]
gen 最高学历毕业院校和专业=毕业院校专业[_n+1]
只保留奇数列:
keep if mod(_n, 2) == 1
最后对变量进行剔除和整理,就完成啦
drop 学历学位 序号
rename E 第一学位学历
replace 最高学历=subinstr(最高学历,`"本科"',"",.)
这就是最终整理完的数据:
2
第二种方法是将原始数据拆分成两个新数据,通过匹配进行合并,具体如下:
同样是读入数据
clear
set more off
cd d:/mydata
import excel using teacher.xlsx,first
然后,使用函数生成两个新变量a和b,方便进行之后的匹配工作。
gen a=int((_n-1)/2)
gen b =mod(_n,2)
然后单独把最高学历和对应的毕业院校提取出来,生成b0数据,同时为了不损害之前的数据,使用preserve和restore命令:
preserve
keep if b==0
drop 姓名 性别 学历学位
rename (E 毕业院校专业)(最高学历 最高学历毕业院校和专业)
save D:/mydata/b0,replace
restore
整理后的b0数据如下:
接着提取剩下的变量,生成b1数据
keep if b==1
save D:/mydata/b1,replace
b1数据如下:
然后就可以对b0和b1数据进行匹配了
use D:/mydata/b0,clear
merge 1:1 a using D:/mydata/b1
这样就生成了格式为每个老师各占一行的最初数据
对数据中变量的顺序稍作整理,剔除掉多余的列数,对具体的变量进行修正,即可得到最终的整理好的数据:
replace 最高学历=subinstr(最高学历,`"本科"',"",.)
drop a b _merge 学历学位
rename E 第一学位学历
order 最高学历,after(毕业院校专业)
order 最高学历毕业院校和专业,after(最高学历)
以上就是今天给大家分享的内容了,说得好就赏个铜板呗!有钱的捧个钱场,有人的捧个人场~。
应广大粉丝要求,爬虫俱乐部的推文公众号打赏功能可以开发票啦,累计打赏超过1000元我们即可给您开具发票,发票类别为“咨询费”。用心做事,只为做您更贴心的小爬虫。第一批发票已经寄到各位小主的手中,大家快来给小爬虫打赏呀~
文字编辑:梅洁瓷傲
技术总编:刘贝贝
往期推文推荐:
7.一言不合就用stata写邮件(Outlook/Foxmail)
9.I have a Stata, I have a python
10.I have a Stata, I have a Python之二——pdf转word
关于我们
微信公众号“爬虫俱乐部”分享实用的stata命令,欢迎转载、打赏。爬虫俱乐部是由李春涛教授领导下的研究生及本科生组成的大数据分析和数据挖掘团队。
此外,欢迎大家踊跃投稿,介绍一些关于stata的数据处理和分析技巧。
投稿邮箱:statatraining@163.com
投稿要求:
1)必须原创,禁止抄袭;
2)必须准确,详细,有例子,有截图;
注意事项:
1)所有投稿都会经过本公众号运营团队成员的审核,审核通过才可录用,一经录用,会在该推文里为作者署名,并有赏金分成。
2)邮件请注明投稿,邮件名称为“投稿”+“推文名称”。
3)应广大读者要求,现开通有偿问答服务,如果大家遇到关于stata分析数据的问题,可以在公众号中提出,只需支付少量赏金,我们会在后期的推文里给予解答。
欢迎关注爬虫俱乐部
微信扫一扫
关注该公众号