查看原文
其他

split和nsplit助你轻松拆分

爬虫俱乐部 Stata and Python数据分析 2022-03-15

本文作者:宁刘莹

文字编辑:李婷婷

技术总编:张计宝



Python暑期线上课程火热招生中~

     爬虫俱乐部将于2020年7月25日至28日线上举行Python编程技术训练营,本次培训采用理论与案例相结合的方式,帮助大家在掌握Python基本思想的基础上,学习科学计算技术与网络数据抓取技术,详情可点击《Python云端培训课程开始报名~》,或点击文末阅读原文直接提交报名信息呦~

导读

在使用stata处理数据的过程中,我们经常会遇到需要将变量按照不同的要求拆分成若干个变量的情况,如果是有着明显的拆分标志字符串,通常使用split比较多,但如果是没有拆分特征的数字变量呢?这时候nsplit就可以派上用场。下面小编就带大家看看二者的不同使用方法。

一、 split

spilt命令用于拆分字符串变量,其语法如下:

split strvar [if] [in] [, options]

split的选项包括:

generate()选项用来为拆分的变量们命名;

parse()选项用来指定以什么字符作为拆分的标志,默认为空格;

limit(#)用来指定拆分出来的新变量个数的最大值;

notrim()用以指定不删减原始变量字符串中前缀或末尾的空格;

destring选项规定对拆出来的新变量,尽量用数值型变量替换初始字符型变量;

ignore("chars")选项用于删掉指定的非数字字符;

force对于存在非数字的变量,采取强制destring,会将非数字的变量转换为缺失值;

float选项指定数值型变量的类型为浮点型;

percent选项用于将百分比形式的数字转换成分数。


举个简单的例子,我们拿auto数据来说,我们发现数据中的汽车制造厂商名称大部分都是由两个或者三个单词构成,如果想要拆分开的话,就可以使用split。

clear allsysuse autosplit make, gen(name) parse(" ")list make name* in 1/5

这里我们用parse选项指定了拆分符号,如果不加这个选项,结果是一样的,因为默认分隔符就是空格,拆分后结果如下:

二、 nsplit

除了字符型变量之外,我们经常会遇到需要拆分数值型变量的情况,数值型变量一般不会有分隔符以供分割,它们的拆分思想自然是按照数字个数来拆分。nsplit的语法如下:
nsplit [varname] [if exp] [in range] , digits(digit pattern in existing variable) [generate(newvarlist or stub) ]

首先,digits选项是一个必选项,用于规定拆分的模式,如将七位数拆分为2、2、3,则需要写成digits(2 2 3);如果需要拆分的位数相同,如需将六位数拆分为三个两位数,则只需写成digits(2)即可;

generate()选项用于生成新变量的变量名。


举个例子,比如我们遇到了一个数据中有省地县码,而我们需要通过省地县码这个变量来确定省份,我们知道,省地县码一般由六位数字构成,前两位数字是省份的代码,那么我们就可以通过使用nsplit命令来操作。
clear allinput code str20130102 //河北省石家庄市长安区130103 //河北省石家庄市桥东区130203 //河北省唐山市路北区140106 //山西省太原市迎泽区220203 //吉林省吉林市龙潭区331082 //浙江省台州市临海市371521 //山东省聊城市阳谷县410105 //河南省郑州市金水区420111 //湖北省武汉市洪山区endnsplit code, digits(2) gen(a)

如图,code变量的每两位数就被拆分为了共计三列变量,a1变量即为省份代码。
rename a* (provincecode citycode countycode)gen province = "河北省" if provincecode == 13replace province = "山西省" if provincecode == 14replace province = "吉林省" if provincecode == 22replace province = "吉林省" if provincecode == 22replace province = "浙江省" if provincecode == 33replace province = "山东省" if provincecode == 37replace province = "河南省" if provincecode == 41replace province = "湖北省" if provincecode == 42

这样,就将省地县码中的前两位数与其对应的省份名称匹配上了。

 

在实际操作中,这两个命令可以结合起来使用,通过不同的功能解决不同的需求,尤其是在爬虫后,可以使用split命令对爬取的内容进行清洗,再对各个变量进行细致的拆分。





对我们的推文累计打赏超过1000元,我们即可给您开具发票,发票类别为“咨询费”。用心做事,不负您的支持!
往期推文推荐

集成学习介绍之三——Stacking算法

PyMuPDF提取文本信息

Mylabels命令介绍  

用WordStat看中国日报新闻  

数据集的划分——交叉验证法

大数据视角下的大学录取分数排行
集成学习介绍之二——Boosting算法

PDF文本信息提取(二)

取长补短、互通有无 ——集成学习介绍之Bagging &随机森林
PDF表格信息提取
神经网络——brain
marktouse标记使用变量
换种视角看问题——支持向量机(SVM)
提取PDF文本信息:入门
毕业季|b站《入海》评论爬取
Stata云端课程来啦
利用广义线性模型实现的分类——Logistic回归

关于我们



微信公众号“Stata and Python数据分析”分享实用的stata、python等软件的数据处理知识,欢迎转载、打赏。我们是由李春涛教授领导下的研究生及本科生组成的大数据处理和分析团队。

此外,欢迎大家踊跃投稿,介绍一些关于stata和python的数据处理和分析技巧。
投稿邮箱:statatraining@163.com
投稿要求:
1)必须原创,禁止抄袭;
2)必须准确,详细,有例子,有截图;
注意事项:
1)所有投稿都会经过本公众号运营团队成员的审核,审核通过才可录用,一经录用,会在该推文里为作者署名,并有赏金分成。
2)邮件请注明投稿,邮件名称为“投稿+推文名称”。
3)应广大读者要求,现开通有偿问答服务,如果大家遇到有关数据处理、分析等问题,可以在公众号中提出,只需支付少量赏金,我们会在后期的推文里给予解答。

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存