堆叠变量一个在另一个下面

时间:2019-08-26 15:13:31

标签: stata

我的Stata数据集中有以下变量:

clear
input BGJTH98 GJKE54 SDKA12 JLTH65 VCNH58
2907 199 641 202 487
2908 199 641 202 487
2909 199 641 202 487
2910 199 641 202 487
2911 199 641 202 487
2912 199 641 202 487
2913 199 641 202 487
2914 199 641 202 487
2915 199 641 206 487
2916 199 641 202 487
2917 199 641 202 487
2918 199 641 202 487
2919 199 641 202 487
2920 204 641 202 487
2921 204 641 202 487
2922 204 641 202 487
2923 204 641 202 487
2924 204 641 202 487
2925 204 641 202 487
2926 204 641 202 487
2927 204 641 202 487
2928 204 641 202 487
2929 204 641 202 487
2930 204 641 202 487
2931 204 641 204 492
2932 204 641 204 492
2933 204 641 204 492
2934 204 641 204 492
2935 204 641 204 492
2936 204 641 204 492
end

我试图将这些变量一个接一个地堆叠,但是我没有得到我期望的结果:

stack *, into(a) clear

例如:

_stack   a  
   1   2907  
   1   2908  
   1   2909  
   1   2910  
   1   2911  

_stack  a  
   2   199  
   2   199  
   2   199  
   2   199  
   2   199  
   2   199  

但是,我想要的是下面的输出:

_stack   a  
   1   2907  
   1    199  
   1    202  
   1    641  
   1    487  
   2   2908  
   2    199  
   2    202  
   2    641  
   2    487  

如果可能,我还要保存变量名。

1 个答案:

答案 0 :(得分:3)

这是使用reshape命令最好解决的问题:

rename (*) (a=)

generate _i = _n
reshape long a, i(_i) j(_j) string

list in 1/10

     +---------------------+
     | _i        _j      a |
     |---------------------|
  1. |  1   BGJTH98   2907 |
  2. |  1    GJKE54    199 |
  3. |  1    JLTH65    202 |
  4. |  1    SDKA12    641 |
  5. |  1    VCNH58    487 |
     |---------------------|
  6. |  2   BGJTH98   2908 |
  7. |  2    GJKE54    199 |
  8. |  2    JLTH65    202 |
  9. |  2    SDKA12    641 |
 10. |  2    VCNH58    487 |
     +---------------------+