查看原文
其他

小命令,大不同——insobs插入新值

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

本文作者:李钊颖

文字编辑:朱巧利

技术总编:李朋冲


小编平时在处理数据的时候发现很多有趣的小命令,命令虽小,用对了能解燃眉之急。今天就为大家介绍一个插入观测值的小命令—insobs(即insert observations)。insobs命令可以将新的观测值插入到数据集中,既可以在数据集的结尾处增加新的观测值,也可以在数据集的中间处插入新的观测值。下面我们介绍下insobs命令的基本用法及在数据处理中的用途。

 

 一、基本用法

我们以auto数据集为例,向大家介绍insobs命令的用法。


 1、创建数据集


clearinsobs 10 //创建一个包含10个观测值的数据集


可以看到数据编辑器中出现了10个观测值:



2、插入观测值

 

(1)在数据集末端增加观测值

sysuse auto, clearinsobs 10  //insobs命令后面跟上数字,默认在数据集末端增加观测值


可以看到原有数据的末尾增加了10个观测值:



2)在数据集中间插入观测值


在第20个观测值前面插入5个新的观测值


sysuse auto, clearinsobs 5, before(20)

可以看到,在原来第20个观测值的前面插入了5个新的观测值,原来的第20个观测值变成了第25个观测值:


在第15个观测值后面插入3个新的观测值:


sysuse auto, clearinsobs 3, after(15)

可以看到,第15个观测值后面出现了3个新的观测值:

  


3)在数据集末尾插入观测值

 

在最后一个观测值之前插入5个新的观测值:


sysuse auto, clearinsobs 5, before(_N)

最后一个观测值内容没有变,但从第74个变成了第79个观测值:


在最后一个观测值之后插入5个新的观测值: 


sysuse auto, clearinsobs 3, after(_N) //_N表示数据集中的观察总数



二、案例分析


在之前处理数据的时候,小编想在数据集中插入提取到的观测值,insobs命令可以很方便地实现这一要求,让我们一起来看看吧!


clearcap mkdir D:\机构设立\cd D:\机构设立\copy "https://stata-club-1257787903.cos.ap-chengdu.myqcloud.com/institutions.dta" 机构设立情况.dtause 机构设立情况.dta, clear

这个样例数据小编已经上传到了爬虫俱乐部云端,需要的小伙伴可以自取。该样例数据共有172个观测值,我们先来瞄一眼前5行的观测值:


我们需要从机构地址中提取出城市名称。观察这个数据可以发现,城市的名称要么跟在安徽省的后面,要么位于字符串的开头位置。我们一一进行提取。

首先我们对城市名称位于安徽省后面的情况进行提取:


gen city = ustrregexs(1) if ustrregexm(机构地址, "省(.+?市)")list in 1/5


正则表达式“省(.+?市)”用来匹配从“省”开始到最近的“市”之间的字符串(懒惰模式),然后利用子表达式和ustrregexs()函数把相应的城市名称提取出来。结果如下:


接着我们再对城市名称位于字符串开头位置的情况进行提取:

 

replace city = ustrregexs(0) if ustrregexm(机构地址, ".+?市") & city == ""list in 1/5


正则表达式“.+?市”用来匹配从字符串开头位置到最近的一个“市”之间的字符串,余下过程如前所述。结果如下:



我们看下数据集中的所有数据是不是都成功提取了:


count if city != ""



数据集中的172个观测值提取成功。


接着我们想在每个机构地址下面插入一个新的观测值,其内容是对应提取出的城市名称,每一对值之间再用空行隔开。数据集有172个观测值,在观测值前后各插入一个观测值之后变成516个观测值。首先我们插入新的观测值:


forvalues i = 1(3)516 { insobs 1, before(`i') insobs 1, after(`=`i'+1')}list in 1/5



接着把提取出的城市名称插入到对应位置,并删除不需要的变量city:


replace 机构地址= city[_n-1] if mod(_n,3)==0drop citylist in 1/7, sep(7)

这样我们就处理好了这个数据:


在我们平时的操作中,“set obs”可能是一个更流行的选择,但在处理数据的过程中,需要增加和插入观测值时,insobs命令非常好用,还可以结合循环,连续自动插入。还有当我们处理数据遇到缺失的情况时,用insobs插入空值,这样后续研究才不会因数据错位而出错。快记下这个好用的小命令吧!



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

新的一年,效率满满~(上)

圆蛋快乐

BvD最后一弹——宏观数据宝典

一招搞定并购数据

多图“预警”(二)

您的圣诞礼物到了,请注意查收
BvD数据库介绍之Oriana
frlink:让连接更具“目的性”
多图“预警”(一)
Selenium的等待方式
一举拿下函数图像
BvD数据库介绍之Osiris
来!左边跟我一起画个龙在你右边画一道彩虹~
Selenium登录豆瓣
妙用正则表达式--Python中的re模块(二)
cngcode和cnaddress新鲜出炉!
数据可视化之地理图

关于我们

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

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

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

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