查看原文
其他

数据排列:sort和gsort

徐苾雯 Stata and Python数据分析 2022-03-15

哈喽,诸君安。在我们处理数据的过程中,经常需要对数据进行排序处理。用到的是两个非常简单的命令:sortgsort。命令虽然简单,但是还是有很多讲究的哦!接下来,小编就给大家详解这两个命令。

一、sort命令

【基本语句】

sort varlist [in] [, stable]

varlist代表将要进行排序的变量名称,[in]代表排序的范围,[, stable]的含义是如果两个观测值相同,其顺序保持与原数据相同。

【用法】

为了方便我们的演示,我们对数据进行截取,在系统数据中,只保留make、price、mpg、length、foreign几个变量。

use auto, clear

keep make price mpg length foreign

list

我们可以得到一个完全没有排序的数据列表:

例1:一个变量的排序

如果sort命令中只包含一个变量名,无论变量类型是数值还是字符串,stata都会以此变量对数据进行升序排序。

sort mpg

list


显然,结果已经是对mpg变量进行了从小到大的升序排序。

可是我们可以注意到,结果中许许多多的项目显示着同样的mpg数值,我并不想改变它们在原数据表格中的位置,那该怎么办呢?这时候,就需要使用我们的[, stable]

例2:观测值相同的排序

还是对mpg进行排序,但我们加上一个小尾巴,结果就会满足我们的需求:

sort mpg, stable

list


一眼看去,结果好像并没有发生什么变化,可真的是这样吗?我们以结果中mpg值同为14的部分数据为例,除了mpg值的相同让它们的排序发生了变化之外,其他排序与图一中的排序保持一致,再与图二的结果对比一下,你发现这个小差别了吗~

以上我们只展示了一个变量的排序,那数据中有多个变量要进行排序的时候我们是否也可以使用sort这个命令呢?答案当然是肯定的。

例3:多个变量的排序

如果命令包含有两个或者更多变量名的varlist,数据将以如下方式排序:

键入sort命令,按第一个变量对观测值进行排序,然后,对于在第一个变量有相同取值的观测值,stata按第二个变量对这些观测值进行排序,等等。在使用sort命令之后,数据集将被标记为是按那些变量排序的,但如果希望保存这一新排序次序的话,需要将此新的数据集保存到硬盘里。

sort mpg length

list


显然,在对mpg从小到大排序后再对length变量从小到大进行排序。在两个以上的变量的排序中也是同样的道理。


二、gsort命令

【基本语句】

gsort [+|-] varname [[+|-] varname ...] [, generate(newvar) mfirst]

其中需要说明的内容有两点:①[+]表示按升序排列,这也是Stata默认的排列方式,[-]表示按降序排列;②generate(newvar)表示排序之后生成新的变量,mfirst表示将缺失值排在最前面。

例1:升序排列

gsort +make

list

我们可以看到显示的结果是按make中数据的由A至Z的字母升序排列的。

例2:降序排列

gsort -make

list

与上一个例子不同,图中的结果显然是按照make变量中字母由Z到A的降序排列。

三、sort的小秘密

我们导入一份最近5年全国各省份国内生产总值的数据(数据来源:国家统计局),对地区进行排序,输出结果。发现下面两幅图有什么区别了吗?

没错,我们发现,同样是对地区的升序排序,可是图一与图二的排列结果并不一样。这就是藏在stata不同版本中sort的小秘密。图一是在stata13的版本中使用sort的结果,可以看到该版本中对中文字符是按中文拼音的字母排序的。而图二是在stata14中使用sort的结果,与13版本出现结果不同的原因在于stata14版本中对中文字符按照UTF-8汉字编码排序。



应广大粉丝要求,爬虫俱乐部的推文公众号打赏功能可以开发票啦,累计打赏超过1000元我们即可给您开具发票,发票类别为“咨询费”。用心做事,只为做您更贴心的小爬虫。第一批发票已经寄到各位小主的手中,大家快来给小爬虫打赏呀~

以上就是今天给大家分享的内容了,说得好就赏个铜板呗!有钱的捧个钱场,有人的捧个人场~,点赞打赏随您心意,么么哒~

编辑by司海涛    

那些让你具有高手气场的黑科技:

1.天路——chinafin与cntrade命令

2.分时数据,从此唾手可得

3.有了这个命令,以后还怕重复?

4.esttab功能挖掘:“Yes”or“No”

5.用“套路”处理数据

6.厉害了,我stata哥

7.爬虫俱乐部周末送大礼——chinagcode提取中文地址经纬度

8.据说这样数据替换比较快,你试一下,然后……

9.众里寻她千百度,synth命令来帮助!

10.I have a Stata, I have a python

11.用subinfile修改文件,滚蛋吧,繁琐的命令君!

12.删繁就简三秋叶,subinfile似剪刀

关于我们

微信公众号爬虫俱乐部”分享实用的stata命令,欢迎转载、打赏。爬虫俱乐部是由李春涛教授领导下的研究生及本科生组成的大数据分析和数据挖掘团队。

此外,欢迎大家踊跃投稿,介绍一些关于stata的数据处理和分析技巧。

投稿邮箱:xueyuan19920310@163.com

投稿要求:

1)必须原创,禁止抄袭;

2)必须准确,详细,有例子,有截图;

注意事项:

1)所有投稿都会经过本公众号运营团队成员的审核,审核通过才可录用,一经录用,会在该推文里为作者署名,并有赏金分成。

2)邮件请注明投稿,邮件名称为“投稿”+“推文名称”。

3)应广大读者要求,现开通有偿问答服务,如果大家遇到关于stata分析数据的问题,可以在公众号中提出,只需支付少量赏金,我们会在后期的推文里给予解答。

欢迎关注爬虫俱乐部~~

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

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