查看原文
其他

“个性化”sortobs命令,教你实现排序自由

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

本文作者:俞诗琪

文字编辑:张馨月

技术总编:张计宝


看到标题中的“sortobs”,想必大家容易联想到sort命令,此前我们也有详细介绍过这个命令,可见往期推文——《数据排列:sortgsort。那么,数据排序时可用到sort命令和gsort命令,为什么我们还要介绍sortobs命令?下面用一个简单的例子回答这个问题:


clear allsysuse autokeep make mpg keep in 1/6sort make



导入auto数据集,仅保留变量makempg,观察值前6行如上图所示。使数据集按变量make取值排列,若要将变量值为“AMC Concord”的项移到最后,其余项依次前移一行,实现如下排列结果:



那么仅仅使用sort命令或gsort命令就鞭长莫及了。现在我们拿出杀手锏——sortobs命令,瞧这个命令是如何帮助我们,巧妙解决上述问题的:


sortobs make,values("AMC Concord") last


此时就出现了上图的结果啦,是不是很神奇呢?其实,sortobs命令不仅可以将一项观察值移至数据集开头或末尾,还可将其移至任意一项观察值之前或之后。类似的操作也可同时用于处理多项观察值,以“个性化”我们的数据顺序。接下来我们就简单学习下sortobs这个命令。


一、sortobs命令的语法及常用选项


首先,sortobs是个外部命令,需要通过“ssc install sortobs”进行安装。使用该命令,不仅可以通过变量观察值,还可以通过行编号对数据进行排序。

依据变量观察值对数据进行排序时,sortobs命令后加上变量名,选项values()before()after()括号内为所依据的变量观察值内容,形式必须为字符串,其基本语法如下:


sortobs varname ,values(stringlist) [first last before(string) after(string)]

依据行编号对数据进行排序时,sortobs命令后不加变量名,紧跟逗号,选项values()、before()或after()括号内为所依据的行编号,形式必须为数值,其基本语法如下:

sortobs , values(numlist) [first last before(#) after(#)]

sortobs命令选项的简要介绍:

1values():指定一项或多项观察值,根据自定义的变量观察值或行编号顺序,对该一项或多项观察值重新排序。

2firstsortobs命令的默认选项,移动指定的一项或多项观察值至数据集开头

3last:移动指定的一项或多项观察值至数据集末尾

4before():移动指定的一项或多项观察值至数据集某一行前,括号内注明该行指定变量的观察值或行编号。

5after():移动指定的一项或多项观察值至数据集某一行后,括号内注明该行指定变量的观察值或行编号。


二、sortobs命令的用法示例


接下来,我们将分两种情况(使用变量观察值自定义排序和使用行编号自定义排序),通过简单示例来帮助大家,更好地理解sortobs命令的用法。

 

1、使用变量观察值自定义排序


首先,本文开头介绍的例子,就是根据变量观察值内容,利用sortobs命令实现的自定义排序,此处我们再来回顾下:

clear allsysuse autokeep make mpg keep in 1/6sort makesortobs make,values("AMC Concord") last


在根据make变量值升序排序基础上,我们利用sortobs命令及选项values() last,将make变量观察值为“AMC Concord”的一项数据移至末尾,对比使用sortobs命令前后的数据集,得到如下转变结果:



再次使用sort命令,使数据集按make变量值升序排列。此时利用sortobs命令及选项values() before(),我们还可以将make变量观察值为“AMC Concord”的一项数据移至“Buick LeSabre”前:


sort makesortobs make,values("AMC Concord") before("Buick LeSabre")


数据自定义排序前后变化如下所示:



同样地,对于多项观察值我们也有类似操作:


sort makesortobs make,values("AMC Spirit" "AMC Concord" ) last



结果将变量make位于不同行的两项观察值“AMC Spirit”“AMC Concord”一同移到数据集末尾,避免了单项移动的繁琐操作,使得我们的“个性化”排序更为简便。

 

2、使用行编号自定义排序


另外前文也有提到,根据行编号同样能自定义数据的排序,其程序和结果如下:


sort makesortobs,values(1) last



使用sort命令,让数据集恢复到按make变量值升序排列状态。通过sortobs命令及选项values() last,将数据集第1行观察值移至最后,其余各项均上移一行,得到上图结果。同样地,也可通过sortobs命令及选项values() before()来自定义排列:


sort makesortobs,values(1) before(6)


此时原数据集第1行观察值移至第6行观察值前,得到如下排列结果:



对于多项观察值采用行编号排序,也有类似操作:


sort makesortobs,values(3 1) last


看到这里,大家一定都豁然开朗了吧!对于解决同一个问题,sortobs命令的用法多样,既可以根据变量观察值,也可使用行编号自定义排序,面对实际问题时,大家选择最简便的方法即可。并且,这个命令简单好用,选项不易混淆,非常实用,心动不如行动,大家赶紧上手试试吧!






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

恭贺新春,平安顺遂|各省疫情关注度地图

过年观影指南(二)

过年观影指南(一)

egenmore隐藏功能——进制转换

相遇insobs,如暗室逢灯

数据可视化之地理坐标系

SFI:Stata与Python的数据交互手册(一)
Stata模拟构建朋友圈
一个粉丝的疑惑—— local和scalar
新的一年,效率满满~(下)

自科基金项目信息爬取

rename group批量修改变量名

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

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

圆蛋快乐
BvD最后一弹——宏观数据宝典

关于我们



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

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



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

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