其他
相遇insobs,如暗室逢灯
本文作者:余术玲
文字编辑:朱巧利
技术总编:李朋冲
细心一点会注意到全科合格证书号、全科合格年份对应的信息缺失,在用Stata处理这种缺失信息时,insobs就能派上用场。话不多说,我们把网页源代码读进Stata里操作一下~
界面网址为:http://cmispub.cicpa.org.cn/cicpa2_web/07/0000010F849F5574427C1C9AEB72116F.shtml,我们首先获取源代码,然后导入Stata,对其进行数据清理:
clear all
efolder 注册会计师个人信息, cd(d:/)
cap copy "http://cmispub.cicpa.org.cn/cicpa2_web/07/0000010F849F5574427C1C9AEB72116F.shtml" temp.txt, replace //抓取网页源代码
****当抓取不成功时,休息五秒再次抓取
while _rc !=0 {
sleep 5000
cap copy "http://cmispub.cicpa.org.cn/cicpa2_web/07/0000010F849F5574427C1C9AEB72116F.shtml" temp.txt, replace
}
infix strL v 1-10000 using temp.txt, clear
replace v = ustrfrom(v,"gb18030",1)
网页源代码的截图如下:
*****用界定标签保留我们想要的信息*****
gen m = ustrregexm(v,`"<td colspan="8" class="table_header">"')
gen m1 = sum(m)
drop if m1 == 0
gen m2 = ustrregexm(v,`"<!--中部表格结束-->"')
gen m3 = sum(m2)
keep if m3 == 0
keep v
*****删除尖括号和里面的内容以及标签“<!--”与“-->”之间的信息*****
drop if ustrregexm(v,`"<.+?>"')
gen m4 = ustrregexm(v,`"<!--"')
gen total1 = sum(m4)
gen m5 = ustrregexm(v,`"-->"')
gen total2 = sum(m5)
gen total3 = total1 + total2
drop if total3 == 1
drop if ustrregexm(v,`"-->"')
keep v
******继续删除我们不需要的观测值*****
drop if ustrregexm(v,"基本信息|通过领军人才后备队伍选拔测试年份|领军人才年份|通过中国注册会计师全国统一考试英语测试年份|英语测试年份|执行业务信息|受教育信息|资格取得信息|考试信息|注册信息|综合信息|考核信息") //以上均为标题
drop in 1 //删除首行空值
drop if v == "" //删除其余空行
replace v=ustrregexra(v," ","")
下面我们生成错行变量v1,v1的第n个观测值是变量v的第n+1个观测值,然后保留奇数行,再进行转置:
gen v1 = v[_n+1]
keep if mod(_n,2) == 1
转置以后,我们要使用nrow命令把第一行观测值变为变量名,这时,包含“/”的观测值会被转换成_var,在此,我们需要提前把“/”全部替换成“或”
replace v = subinstr(v, "/", "或", .)
replace v = ustrregexra(v, `" "', "")
sxpose,clear
nrow
save 陈明生.dta, replace
forvalues k1 = 1/`=_N'{
if ustrregexm(v[`k1'],"全科合格证书号") & ustrregexm(v[`k1'+1],"全科合格年份") {
insobs 1,after(`k1')
}
}
forvalues k2 = 1/`=_N'{
if ustrregexm(v[`k2'],"全科合格年份") & ustrregexm(v[`k2'+1],"注册会计师证书编号"){
insobs 1,after(`k2')
}
}
如果还有其他信息有缺失,可借鉴上述两种情况的填补空行办法进行处理。
最后再执行gen v1 = v[_n+1]及其以后的程序,运行结果如下图所示:
这样我们就得到了与原始网页信息相符的数据啦!
怎么样,insobs有木有很amazing呢!结合循环为数据插入观测值,赶紧用这个案例练练手吧!
自科基金项目信息爬取
rename group批量修改变量名
小命令,大不同——insobs插入新值
新的一年,效率满满~(上)
关于我们
微信公众号“Stata and Python数据分析”分享实用的stata、python等软件的数据处理知识,欢迎转载、打赏。我们是由李春涛教授领导下的研究生及本科生组成的大数据处理和分析团队。
1)必须原创,禁止抄袭;
2)必须准确,详细,有例子,有截图;
注意事项:
1)所有投稿都会经过本公众号运营团队成员的审核,审核通过才可录用,一经录用,会在该推文里为作者署名,并有赏金分成。
2)邮件请注明投稿,邮件名称为“投稿+推文名称”。
3)应广大读者要求,现开通有偿问答服务,如果大家遇到有关数据处理、分析等问题,可以在公众号中提出,只需支付少量赏金,我们会在后期的推文里给予解答。