重塑数据布局

时间:2016-02-04 11:58:39

标签: formatting stata

我正在尝试重新组织我的数据,但我正在努力弄清楚如何。

目前它的组织方式如下:

Person  total   Birmingham  London  Coventry    Edinburgh
James   6           1                   5   
Kitty   9           2         3         1           3
Heather 3                     2                     1
John    5                     2         2           1

我想把它重新组织成这样:

Person   Place      Visits
James    total       6
James    Birmingham  1
James    London      0
James    Coventry    5
James    Edinburgh   0
Kitty    total       9
Kitty    Birmingham  2
Kitty    London      3
Kitty    Coventry    1
Kitty    Edinburgh   3
Heather  total       3
Heather  Birmingham  0
Heather  London      2
Heather  Coventry    0
Heather  Edinburgh   1
John     total       5
John     Birmingham  0
John     London      2
John     Coventry    2
John     Edinburgh   1

我已经尝试过使用Stata命令reshape,但还没有达到目标。

我认为我的主要问题是我有很多变量都是唯一的名字。而不是在reshape命令中列出所有内容,还有另一种方法吗?

我无法在其他地方找到任何帮助帖子(可能因为我不确定如何描述问题)。

我也确定在Excel中有办法做到这一点,但我试图将所有分析保存在一个地方(Stata)。

2 个答案:

答案 0 :(得分:1)

您需要为要重塑的变量添加前缀。您可以自动执行此操作,例如:

ds Person, not
rename (`r(varlist)') (Visits=)

然后reshape应该是直截了当的:

reshape long Visits, i(Person) j(Place) string

答案 1 :(得分:1)

我的建议与@Andrei的精神相似,但细节上有重大差异。

从本质上讲,你不应该将total变量视为与其他变量类似,因为它不是。否则,下游的分析可能比必要的更复杂,甚至是非常错误的。

clear 
input str7 Person  total   Birmingham  London  Coventry    Edinburgh
"James"   6           1         .          5          .
"Kitty"   9           2         3         1           3
"Heather" 3           .          2         .            1
"John"    5           .         2         2           1
end 
rename (Birmingham-Edinburgh) (Visits=) 
reshape long Visits, i(Person) string j(Place) 
list, sepby(Person) 

     +---------------------------------------+
     |  Person        Place   total   Visits |
     |---------------------------------------|
  1. | Heather   Birmingham       3        . |
  2. | Heather     Coventry       3        . |
  3. | Heather    Edinburgh       3        1 |
  4. | Heather       London       3        2 |
     |---------------------------------------|
  5. |   James   Birmingham       6        1 |
  6. |   James     Coventry       6        5 |
  7. |   James    Edinburgh       6        . |
  8. |   James       London       6        . |
     |---------------------------------------|
  9. |    John   Birmingham       5        . |
 10. |    John     Coventry       5        2 |
 11. |    John    Edinburgh       5        1 |
 12. |    John       London       5        2 |
     |---------------------------------------|
 13. |   Kitty   Birmingham       9        2 |
 14. |   Kitty     Coventry       9        1 |
 15. |   Kitty    Edinburgh       9        3 |
 16. |   Kitty       London       9        3 |
     +---------------------------------------+