堆叠每个唯一ID的变量

时间:2017-09-21 19:50:47

标签: stata

我正在使用Stata 13使用

将多个变量堆叠到一个变量中
stack stand1-stand10, into(all)

但是,我需要为每个与all平行粘贴的唯一ID执行此操作,例如:

bysort familyid: stack stand1-stand10,into(all) keep familyid

1 个答案:

答案 0 :(得分:1)

我们可以使用您的数据示例的更简单的模拟。

clear 
set obs 3 
gen familyid = _n 
forval j = 1/3 { 
    gen stand`j' = _n * `j'
}

list 

     +-------------------------------------+
     | familyid   stand1   stand2   stand3 |
     |-------------------------------------|
  1. |        1        1        2        3 |
  2. |        2        2        4        6 |
  3. |        3        3        6        9 |
     +-------------------------------------+

save original

要使用标识符stack,只需重复标识符变量名称即可。对于多个变量,使用循环准备呼叫最简单。

forval j = 1/3 { 
    local call `call' familyid stand`j' 
}

di "`call'" 
familyid stand1 familyid stand2 familyid stand3


stack `call', into(familyid stand) 
sort familyid _stack 
list, sepby(familyid) 

     +---------------------------+
     | _stack   familyid   stand |
     |---------------------------|
  1. |      1          1       1 |
  2. |      2          1       2 |
  3. |      3          1       3 |
     |---------------------------|
  4. |      1          2       2 |
  5. |      2          2       4 |
  6. |      3          2       6 |
     |---------------------------|
  7. |      1          3       3 |
  8. |      2          3       6 |
  9. |      3          3       9 |
     +---------------------------+

尽管如此,它更容易使用reshape long

use original, clear 
reshape long stand, i(familyid) j(which) 
list, sepby(familyid)  

     +--------------------------+
     | familyid   which   stand |
     |--------------------------|
  1. |        1       1       1 |
  2. |        1       2       2 |
  3. |        1       3       3 |
     |--------------------------|
  4. |        2       1       2 |
  5. |        2       2       4 |
  6. |        2       3       6 |
     |--------------------------|
  7. |        3       1       3 |
  8. |        3       2       6 |
  9. |        3       3       9 |
     +--------------------------+