我
们在用stata处理数据时,有时候需要面板数据,但是数据又不是stata识别的格式,就需要对数据重新调整。以前笔者只会用Excel处理,费时又费力;用过reshape命令之后,数据变形就变得很容易了。
▍reshape是什么?
reshape命令到底是干嘛的?其实它就是一个帮助数据变形的命令,能帮助我们把数据从长型变成宽型,或者从宽型变成长型。
长型和宽型数据的转换可以简单直观地用图形表示成下面这样:
▍reshape怎么用?
从长数据变成宽数据的命令一般为:
reshape wide stubnames, i(varlist) j(varname) string
从宽数据变成长数据的命令一般为:
reshape long stubnames, i(varlist) j(varname) string
(1)stubnames是要进行转换的主变量;
(2)i(varlist)是要作为id的变量,需要注意的一点是这个变量必须是唯一可识别的,不可以有重复值,否则会出错;
(3)j(varname),在长数据变宽数据时,是在长数据中存在但是在宽数据中就不存在的变量;在宽数据变长数据时,varname表示在宽数据中不存在而在长数据中新生成的。
(4)string声明j(varname)中的varname是字符型。
▍栗子!
说了上面这么多,大家可能还是不太明白reshape具体要怎么用,下面我们用例子简单明了地来进一步说明。
PS:下面所用的数据全部来自于stata官网上的数据,所以大家在用的时候首先要保证电脑可以连上网哦~
▍最基本的长型和宽型数据转换
最初的原始数据是这样的,首先判断是宽型数据,我们需要把它变成长型数据才能进行分析。
也就是要变成酱紫:
这个用最基础的reshape命令就可以,完整命令如下:
webuse reshape1,clear
list
reshape long inc ue,i(id) j(year)
list, sepby(id)
▍当
i(varlist)中的varlist的值不唯一时
当我们用reshape long 对下面的宽型数据进行变换时,程序报错了。
程序提醒说,因为id变量中的数值有重复值,因此不能唯一识别。
通过reshape error可以看出哪些值重复了。
把重复值剔除或修改后,可以重新进行数据转换。
▍j(varname)中的varname被嵌在变量中间
这组数据要变成长型数据的难处之处在于年份80、81、82被嵌在inc变量名中间,这个时候需要借助一个特殊的符号——@
完整的程序命令如下:
webuse reshape3, clear
list
reshape long inc@r ue, i(id) j(year)
list,sepby(id)
▍
j(varname)中的varname是字符型变量
这个数据中incm表示母亲收入,incf表示父亲收入,我想把用sex=f和m来表示父亲和母亲,但是这个变量是字符型变量,这个时候就需要用到string选项
完整命令如下:
webuse reshape4, clear
list
reshape long inc, i(id) j(sex) string
list, sepby(id)
▍i(varlist)中包含多个变量
前面的转换都是把两个变量合成一个变量或者把一个变成拆分成两个变量,当我要把三个变量合成一个变量时就有点复杂,比如要把下面数据中的sex、year、inc合成一个变量,我们可以分两步走。
第一步,hid和year变量保持不变,把sex和inc合成一个变量:
reshape wide @inc, i(hid year) j(sex) string
第二步,hid变量保持不变,把year和finc、minc合成一个变量:
reshape wide finc minc,i(hid) j(year)
同理,如果我们想把宽型数据变成长型,也要分两步走:
reshape long minc finc, i(hid) j(year)
reshape long @inc, i(hid year) j(sex) string
通
过上面的具体例子,大家有没有对reshape有更深入的了解呢?如果你需要长宽数据的变形,不妨试试reshape吧!
编辑by强宇曦
往期推文推荐:
3.有了这个命令,以后还怕重复?
7.爬虫俱乐部周末送大礼——chinagcode提取中文地址经纬度
10.I have a Stata, I have a python
此外,欢迎大家踊跃投稿,介绍一些关于stata的数据处理和分析技巧。
投稿邮箱:xueyuan19920310@163.com
投稿要求:
1)必须原创,禁止抄袭;
2)必须准确,详细,有例子,有截图;
注意事项:
1)所有投稿都会经过本公众号运营团队成员的审核,审核通过才可录用,一经录用,会在该推文里为作者署名,并有赏金分成。
2)邮件请注明投稿,邮件名称为“投稿”+“推文名称”。
3)应广大读者要求,现开通有偿问答服务,如果大家遇到关于stata分析数据的问题,可以在公众号中提出,只需支付少量赏金,我们会在后期的推文里给予解答。
长按二维码关注哦
微信扫一扫
关注该公众号