其他
小命令,大不同——insobs插入新值
本文作者:李钊颖
文字编辑:朱巧利
技术总编:李朋冲
1、创建数据集
clear
insobs 10 //创建一个包含10个观测值的数据集
2、插入观测值
sysuse auto, clear
insobs 10 //insobs命令后面跟上数字,默认在数据集末端增加观测值
可以看到原有数据的末尾增加了10个观测值:
(2)在数据集中间插入观测值
在第20个观测值前面插入5个新的观测值
sysuse auto, clear
insobs 5, before(20)
sysuse auto, clear
insobs 3, after(15)
(3)在数据集末尾插入观测值
在最后一个观测值之前插入5个新的观测值:
sysuse auto, clear
insobs 5, before(_N)
sysuse auto, clear
insobs 3, after(_N) //_N表示数据集中的观察总数
二、案例分析
在之前处理数据的时候,小编想在数据集中插入提取到的观测值,insobs命令可以很方便地实现这一要求,让我们一起来看看吧!
clear
cap mkdir D:\机构设立\
cd D:\机构设立\
copy "https://stata-club-1257787903.cos.ap-chengdu.myqcloud.com/institutions.dta" 机构设立情况.dta
use 机构设立情况.dta, clear
首先我们对城市名称位于安徽省后面的情况进行提取:
gen city = ustrregexs(1) if ustrregexm(机构地址, "省(.+?市)")
list in 1/5
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)==0
drop city
list in 1/7, sep(7)
在我们平时的操作中,“set obs”可能是一个更流行的选择,但在处理数据的过程中,需要增加和插入观测值时,insobs命令非常好用,还可以结合循环,连续自动插入。还有当我们处理数据遇到缺失的情况时,用insobs插入空值,这样后续研究才不会因数据错位而出错。快记下这个好用的小命令吧!
关于我们
微信公众号“Stata and Python数据分析”分享实用的stata、python等软件的数据处理知识,欢迎转载、打赏。我们是由李春涛教授领导下的研究生及本科生组成的大数据处理和分析团队。
1)必须原创,禁止抄袭;
2)必须准确,详细,有例子,有截图;
注意事项:
1)所有投稿都会经过本公众号运营团队成员的审核,审核通过才可录用,一经录用,会在该推文里为作者署名,并有赏金分成。
2)邮件请注明投稿,邮件名称为“投稿+推文名称”。
3)应广大读者要求,现开通有偿问答服务,如果大家遇到有关数据处理、分析等问题,可以在公众号中提出,只需支付少量赏金,我们会在后期的推文里给予解答。