楼主: andruw
2946 3

[学习心得] Stata tips & tricks 001: reshape! reshape! [推广有奖]

  • 5关注
  • 27粉丝

已卖:807份资源

副教授

79%

还不是VIP/贵宾

-

威望
0
论坛币
6495 个
通用积分
2504.0561
学术水平
245 点
热心指数
263 点
信用等级
155 点
经验
18620 点
帖子
436
精华
0
在线时间
1396 小时
注册时间
2008-6-13
最后登录
2024-11-24

楼主
andruw 在职认证  发表于 2015-10-6 02:21:26 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

求职就业群
赵安豆老师微信:zhaoandou666

经管之家联合CDA

送您一个全额奖学金名额~ !

感谢您参与论坛问题回答

经管之家送您两个论坛币!

+2 论坛币

(本文为andruw原创,转载请注明出处)


只要对Stata略有了解,恐怕一定知道reshape命令。它可以在“长”(long)、“宽”(wide)数据之间随意变换。本文并不想不厌其烦地介绍该命令的具体用法,因为对该命令的介绍网络上随处可见,而且help文档也有详尽的解释,并附有现成的例子。就算从未接触过该命令,也可照猫画虎不出二十分钟就跑出期待地结果。


一般而言,整理数据只需一次reshape命令即可。在非常不寻常的情况下,执行一次reshape是不够。本文就举一个需要两次reshape例子。



假设我们有如下数据:


  1.      +----------------------------------------------------------------------+
  2.      | country     mode   volume2011   volume2012   volume2013   volume2014 |
  3.      |----------------------------------------------------------------------|
  4.   1. |   China   export         1000         2000         3000         4000 |
  5.   2. |   China   import         5000         6000         7000         8000 |
  6.   3. |      UK   export         9000         9100         9200         9300 |
  7.   4. |      UK   import         8000         8100         8200         8300 |
  8.   5. | Germany   export         7000         7100         7200         7300 |
  9.   6. | Germany   import         6000         6100         6200         6300 |
  10.      +----------------------------------------------------------------------+
复制代码
复制代码

我们想要得到如下的长数据:

  1.      +----------------------------------+
  2.      | country   year   export   import |
  3.      |----------------------------------|
  4.   1. |   China   2011     1000     5000 |
  5.   2. |   China   2012     2000     6000 |
  6.   3. |   China   2013     3000     7000 |
  7.   4. |   China   2014     4000     8000 |
  8.   5. | Germany   2011     7000     6000 |
  9.   6. | Germany   2012     7100     6100 |
  10.   7. | Germany   2013     7200     6200 |
  11.   8. | Germany   2014     7300     6300 |
  12.   9. |      UK   2011     9000     8000 |
  13. 10. |      UK   2012     9100     8100 |
  14. 11. |      UK   2013     9200     8200 |
  15. 12. |      UK   2014     9300     8300 |
  16.      +----------------------------------+
复制代码

仔细观察数据,我们发现由于原始数据并非标准的“宽”数据,reshape一次是无法实现数据转换的。这种情况下就需要分两次reshape。第一次,reshape  long命令,将volume转化为长数据;第二次,reshape   wide,将mode转化宽数据。具体操作命令如下:

  1. clear

  2. input str16 country str16 mode volume2011 volume2012 volume2013 volume2014
  3. China export 1000 2000 3000 4000
  4. China import 5000 6000 7000 8000
  5. UK export 9000 9100 9200 9300
  6. UK import 8000 8100 8200 8300
  7. Germany export 7000 7100 7200 7300
  8. Germany import 6000 6100 6200 6300
  9. end


  10. reshape long volume, i(country mode) j(year) string
  11. reshape wide volume, i(country year) j(mode) string
  12. rename volume* *
复制代码

本文的用意有二:(1)介绍一下reshape的trick;(2)Stata命令要活学活用。


Stata tips & tricks帖子列表:

000. "吐槽"Stata



二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

关键词:reshape Tricks Shape Trick Stata tricks 而且 网络

已有 2 人评分经验 论坛币 学术水平 热心指数 信用等级 收起 理由
ziye304 + 2 + 2 + 2 精彩帖子
夏目贵志 + 50 + 50 + 5 + 5 观点有启发

总评分: 经验 + 50  论坛币 + 50  学术水平 + 7  热心指数 + 7  信用等级 + 2   查看全部评分

沙发
ziye304 发表于 2015-10-6 20:03:58
楼主的分享很好,继续

藤椅
andruw 在职认证  发表于 2015-10-6 22:05:40
ziye304 发表于 2015-10-6 20:03
楼主的分享很好,继续
多谢!

板凳
tmdxyz 发表于 2015-10-7 04:20:11
Stata的reshape命令实现long和wide数据变换

谢谢楼主!

您需要登录后才可以回帖 登录 | 我要注册

本版微信群
加好友,备注jltj
拉您入交流群
GMT+8, 2026-1-2 03:51