查看原文
其他

xpose和sxpose,谁是卧底?

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

本文作者:崔赵雯,中南财经政法大学金融学院

文字编辑:王玉婷 技术总编:余术玲

爬虫俱乐部云端课程

  爬虫俱乐部于2020年暑期在线上举办的Stata与Python编程技术训练营和Stata数据分析法律与制度专题训练营在不久前已经圆满结束啦~应广大学员需求,我们的课程现已在腾讯课堂全面上线,且继续提供答疑服务。现在关注公众号并在朋友圈转发推文《来腾讯课堂学Stata和Python啦》或《8月Stata数据分析法律与制度专场来啦!》,即可获得600元课程优惠券,集赞50个再领200元课程优惠券!(截图发至本公众号后台领取)原价2400元的课程,现在只要1600元!     


一、导论

在Stata中进行数据处理时,我们可能会进行数据转置的操作,对数据转置的命令有xpose和sxpose,今天就为大家介绍一下这两个命令之间的区别。往下看吧!

二、xpose命令

数值型数据进行转置,我们用的是xpose。它的作用是变量与观测值之间的相互转换。所有由转置过程中创建的新变量,存储类型是默认的,因此,当原始变量是字符串时,在转置后观测值中将包含缺失值。同时,如果将字符串数据转置两次,则会丢失字符串变量的内容。xpose命令的语法结构如下:

其中[options]选项有:

①clear:这个选项是必须的,它是提醒你转置之后的原始数据将不存在;

②format:将原始数据中的最大数字显示格式应用于转置后的数据中;

③format(%fmt) :按照设定的数字显示格式应用于转置数据中;

④varname:在转置后的数据中保留原始数据的变量名称;

⑤promote:使转置后的数据存储类型为原始数据中精度最高的存储类型,以确保数值的精确度。当运算精度要求很高的时候,需要将变量的存储类型设置成浮点型或双精度型,但是转置后的数据可能会改变数据的存储类型,这时候我们可以[promote]选项,保证转置后的数值精度。如果原始数据中有变量的存储类型是double,那么转置后的所有数值的存储类型都是double。

下面我们对这些选项举几个例子。(1)关于varname选项的小例子:clear all
input hhid father mother //创建一个记录家庭成员收入的数据
1 4000 5000
2 6000 2500
3 8000 8000
end //注意input命令要和end命令一起执行
list

对数据进行转置:xpose,clear varname
list

如果我们不指定varname选项,变量不会创建_varname,即观测值是原始数据的变量名称。但是,我们想要把第一次转置后的数据再次转置为原始形式,varname选项是要有的。xpose,clear
list

(2)关于format(%fmt)选项的小例子:clear all
input id str10 name economy //录入学生学号、姓名和成绩的数据。注意:因为name是字符串类型的数据,因此name前需要加上表示字符串类型的str#,其中#是代表字节长度的数字
1 John 40
2 Chris 80.5
3 Jack 90
4 Tom 53.5
end
list

对数据进行转置,并通过format(%fmt)选项来设定数字显示格式。
xpose,clear varname format(%10.2f)
list

从运行结果可以看出变量v1-v4观测值均保留两位有效数字。同时,从这个例子中,我们也可以看到xpose不能对字符型数据进行转置,转置后的字符型数据显示为缺失值。(3)关于promote选项的小例子:clear all
sysuse sp500
keep in 1/5
describe
可以看到数值型变量的数据类型有int、float和double,不难发现,原始数据中最高精度的数据存储类型为double。若转置时不使用promote选项,转置后数据存储类型为float,这就降低了数据的精确度。xpose,clear
describe

如果转置时使用promote选项,数据的存储类型都变成了double,确保了转置后数据的精确度。clear all
sysuse sp500
keep in 1/5
xpose,clear promote
describe

三、sxpose命令

字符型数据进行转置,我们用的是sxpose,实现变量与观测值之间的相互转换。sxpose是一个外部命令,初次使用需要安装,安装命令为:ssc install sxpose
安装成功后将显示完成信息:

sxpose命令的语法结构如下:

其中,其中[options]选项有:

①clear:这个选项是必须的,与xpose的clear选项作用相同;

②force:当遇到数值型数据时,继续进行转置,并把数值型数据强制转化为字符型数据;

③format():将设定的格式应用于显示为数值的字符型数据中;

④firstnames:将原始数据的第一列设置为转置后数据的变量名称;

⑤destring:将字符型数据转换为数值型数据。

同样地,我们对这些选项举几个简单的例子。(1)关于force选项的小例子:clear all
webuse census10,clear //美国人口普查数据
keep in 1/5
sxpose,clear
list

如果没有force选项,系统会报错,这是因为pop和medage为数值型数据,且region为带有数值标签的数据,在sxpose后加上force选项,会将这些数据强制转化为字符型数据。sxpose,clear force
list

(2)关于firstnames选项的小例子:clear all
webuse census10,clear //美国人口普查数据
keep in 1/5
list

使用firstnames选项后,原始数据的第一列就不会出现在转置后的观测值中了,原始数据的第一列成为转置后数据的变量名称。sxpose,clear force firstnames
list

(3)关于destring选项的小例子:clear all
webuse census10,clear //美国人口普查数据
drop state
keep in 1/5
sxpose,clear force
describe

可以看到,未使用destring选项时,数据类型为字符型,使用destring选项后,数据类型变为了数值型。clear all
webuse census10,clear //美国人口普查数据
drop state
keep in 1/5
sxpose,clear force destring
describe
以上就是今天的全部内容啦,如果对你有帮助的话,别忘了点个赞呀,加个关注咯,转载、打赏都可以呦~





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

让你的数据一目了然--label命令介绍

Python推文合集基础篇(下)|算法简介【小白指南】Python中有哪些数据类型?(附推文合集)

轻松获取通行数据——cntraveltime命令介绍

让Stata完美牵手中国地图之cnmapsearch

自然语言分析——利用NLTK进行文本预处理

寻找B站的最爱--8月B站全站榜爬虫

cnaddress命令——实现经纬度转换为中文地址

定位神器——cngcode

Python入门—Spyder的简单使用

Jupyter Notebook 的这些tips你了解吗?给变量名换马甲之rename命令

追踪命令set trace on——解你燃眉之急

爬虫大杀器 | “手把手”教你配置Selenium

小白必看!Anaconda安装全攻略

数据类型转换之destring和tostring命令

mvencode和mvdecode——打开缺失值与特定数值转换大门的钥匙关于我们


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

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






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

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