哈喽,诸君安。在我们进行数据处理时,经常需要对数据进行转置,但是不同的数据类型,转置命令也是不一样的。比如说有些数据集只包含数值型的数据,有些只包括字符型的数据,当然更普遍的一个数据集中既有数值型数据,又有字符型数据。今天笔者就给大家一一介绍各类数据转置的方法。
数值型数据的转置
数值型数据的转置,通过xpose这个命令来实现,其语法结构为:
接下来,我们举一个例子:
clear
set more off
webuse xposexmpl
数据如下图:
这是一个3行4列的数据,转置之后会变成一个4行3列的数据。
输入转置命令:
xpose,clear
[注意:clear这个选项是必须的,是为了提醒你转置之后原始数据将不存在。]
这样数据就得到了转置。但是我们发现变量的名称消失了。如果你想保留原始数据中的变量名称,可以加上[varname]
命令如下:
xpose,clear varname
这样就保留了原始数据的变量名称,如果再进行一次转置,会出现什么结果呢?我们尝试一下:
xpose,clear
我们发现转置两次之后,又得到了原始数据。这就是varname选项的方便之处。
另外,我们还可以通过[format(%fmt)]选项,来设定数据的显示格式。
这样,转置之后所有的数值均显示两位小数。这里,如果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,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 司海涛
联系客服