有时候我们会发现,在数据分析过程中,其实大部分精力花在了数据清洗整理环节,数据清洗好了,才能势如破竹。对于样本量较大、变量较多的数据集,清洗起来并非易事。
在处理面板数据的时候,经常会用到数据的长宽转换,能够进行数据长宽转换的工具很多,命令也很多,各有所长。
Stata软件在数据清洗转换方面具有独特的优势,下面演示如何利用stata软件高效快捷进行批量数据长宽转换。
一、长数据和宽数据
表1 长数据
如上表1所示,每个变量都多了一个time来识别调查时间,表示术前、术后1周、术后2周、术后3周等,ID也有重复,这样的数据是长数据。
表2 宽数据
如上表2所示,少了time变量,ID不重复,在之前的每个变量末尾标记了对应的时间,如eyesight0、eyesight1分别表示术前和术后1周的视力情况,这样变量个数就增加了6倍(有7个时间点),这种数据集对所有的变量进行了明确的细分,各变量的值不存在重复循环的情况即为宽数据。
二、Stata软件批量多指标长宽转换
如上所述表1和表2之间的相互转化就是长宽转换。
1.导入数据
可以看出,这是一个长数据,涉及到转换的变量有两个,分别是eyesight和leiyefenmi,时间有7个。
2.转换
我们在命令窗口运行help reshape即可查看reshape的演示
接着在命令窗口运行:reshape wide eyesight leiyefenmi, i(ID) j(time)
即可实现长数据转为宽数据,注释也写得非常清晰明了,观察值由14个变为了2个,变量由10个变为21个,time变量由7个变没了,落到了每个变量的末尾作为标识。
相反地,如果需要将宽数据转为长数据,运行:reshape long eyesight leiyefenmi, i(ID) j(time) 即可。
但是如果需要将刚才已经转完成的宽数据回到长数据怎么办呢?
直接运行reshape long即可回到长数据,运行reshape wide又可回到宽数据,就是这么来回切换,不再像最初那样需要输入每个变量名称。
3.特殊情况
当time变量里面有单位时,即0w、1w、2w、3w,需要利用通配符和占位符来辅助完成。
运行:reshape wide eyesight leiyefenmi, i(ID) j(time) string才能转换成功,否则会报错。
反之,如果是宽数据转为长数据,则需要运行:
reshape long eyesight@w leiyefenmi@w, i(ID) j(time)★注意:
1.本文举的例子是多个变量批量转换的情况,网上绝大多数教程都只是拿一个变量的情况举例子,但现实情况往往不是这样的。
2.还需要注意的是,并不是变量少,观察值多就是长数据,而是看具体数据结构。针对同一个数据集,其长数据和宽数据格式确实分别体现出变量少,观察值多和观察值少,变量多的特点。
3.能够实现长数据和宽数据互相转换的方法很多,如excel的透视表和vlookup函数,R语言tidyr工具包里面的gather/spread函数和pivot_longer/pivot_wider函数、reshape工具包里面的melt/cast函数等,但Stata确实能够更加简单快捷。