打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
数据的转置—xpose&sxpose

哈喽,诸君安。在我们进行数据处理时,经常需要对数据进行转置,但是不同的数据类型,转置命令也是不一样的。比如说有些数据集只包含数值型的数据,有些只包括字符型的数据,当然更普遍的一个数据集中既有数值型数据,又有字符型数据。今天笔者就给大家一一介绍各类数据转置的方法。


数值型数据的转置

数值型数据的转置,通过xpose这个命令来实现,其语法结构为:


接下来,我们举一个例子:

clear

set more off

webuse xposexmpl

数据如下图:

这是一个3行4列的数据,转置之后会变成一个4行3列的数据。

输入转置命令:

xpose,clear

[注意:clear这个选项是必须的,是为了提醒你转置之后原始数据将不存在。]

这样数据就得到了转置。但是我们发现变量的名称消失了。如果你想保留原始数据中的变量名称,可以加上[varname]

命令如下:

xpose,clear varname


这样就保留了原始数据的变量名称,如果再进行一次转置,会出现什么结果呢?我们尝试一下:

xpose,clear


我们发现转置两次之后,又得到了原始数据。这就是varname选项的方便之处。

另外,我们还可以通过[format(%fmt)]选项,来设定数据的显示格式。

xpose, clear varname format(%6.2f)


这样,转置之后所有的数值均显示两位小数。这里,如果format后边不设置具体的数据显示格式,(即[format]),则转置后的数据的显示格式为原始数据中最大的数据显示格式。

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

例如:

clear

set more off

sysuse sp500

keep in 1/15

des


我们发现原始数据中,最高精度的存储类型为double,然后我们对数据进行转置。

xpose,clear

des


我们发现转置后所有数值的存储类型变成了float。而原始数据中,volume的存储类型为double,这就降低了数值的精确度,我们在用[promote]选项进行转置。

xpose,clear promote

des


这样,转置后的数据的存储类型都变成了double,确保了转置后数据的精确性。


字符型数据的转置

我们在之前的推文中介绍过用subinfile整理新浪上市公司公告。用subinfile处理数据之后,导入到stata中,再用split把数据拆分成1行30列,每一列对应一个公告,包括公告的日期、内容以及网址。(subinfile可以大大简化爬虫程序,这里不再介绍,详情可查看往期推文--删繁就简三秋叶,subinfile似剪刀)这里,直接给出爬虫程序:

clear

set more off

cd d:/新浪上市公司公告

copy'http://vip.stock.finance.sina.com.cn/corp/view/vCB_AllBulletin.php?stockid=600900&Page=1'd:/新浪上市公司公告/temp.txt, replace

unicode encoding set gb18030

unicode translate temp.txt, transutf8

unicode erasebackups, badidea

subinfile temp.txt, index() to(;)replace

subinfile temp.txt, from()replace

infix strL v 1-20000 using temp.txt, clear

split v, parse(;;)

drop v 

运行上述程序,可得到如下结果:

这是一个1行30列的数据,我们现在需要把其转变为1列30行,使每一行对应一个公告。很明显,这里我们需要对数据进行转置。如果用xpose进行转置,将出现错误!!

xpose,clear


我们看到,所有观察值转置之后都变为缺失值。这是因为xpose仅仅可以对数值型数据进行转置,而这里所有的观测值都是字符串,所以无法用xpose完成转置。我们可以利用sxpose完成对字符串的转置。

sxpose语法结构如下:


接下来用sxpose对数据进行转置,命令如下:

sxpose,clear


这样我们就完成了对字符串的转置。

上述的数据是一个纯字符串的数据,但是在我们处理数据的过程中,会遇到数据集中既有数值又有字符串,这种情况再用sxpose转置,要加一个force选项,其指定当遇到数值型数据时,继续进行转置,并把数值型数据强制性的变为字符型。

我们举一个例子:

clear

set more off

sysuse auto

keep make price weight foreign

keep in 1/10


这个数据中make所在列为字符串,而foreign所在列为带有数值标签的数值,我们现在用sxpose进行转置。

命令如下:

sxpose,clear force 


转置后的数据,第一行其实就是这个数据的变量名,我们可以通过以下程序,将第一行变为变量名:

export excel using d:\sxpose.xls

import excel using d:\sxpose.xls,clear firstrow 

destring, replace


在处理数据过程中,往往原始数据的第一列为转置后数据的变量名称。如果转置之后,不想让变量名出现在观测值中,这时候我们可以用[firstnames]选项,firstnames指定原始数据的第一列为转置后数据的变量名称。使用[firstnames]选项,原始数据的第一列将不会出现在转置之后的数据中。

sxpose,clear force firstnames destring  


可以看到,转置后的数据不包含原始数据的第一列。destring指定把字符型数据变为数值型。




接下来

关注空气质量

总的空气质量如下图


河南的朋友!!

河南的朋友!!

出门记着戴口罩!!!






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

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

编辑 by   司海涛

 


本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
reshape命令一文读懂!
如何画出美丽的弦图(Chord diagram)?
2.1.3 数据类型的转化
EXCEL中较长数字的自动填充
MATLAB的solve函数
矩阵计算-MATLAB-矩阵计算与分析
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服