Stata 为每个唯一ID堆叠变量
我使用Stata13将多个变量堆叠成一个变量,使用Stata 为每个唯一ID堆叠变量,stata,Stata,我使用Stata13将多个变量堆叠成一个变量,使用 stack stand1-stand10, into(all) 但是,我需要为每个与all平行粘贴的唯一id执行此操作,例如: bysort familyid: stack stand1-stand10,into(all) keep familyid 我们可以使用与您的数据示例更简单的模拟 clear set obs 3 gen familyid = _n forval j = 1/3 { gen stand`j' = _n
stack stand1-stand10, into(all)
但是,我需要为每个与all
平行粘贴的唯一id执行此操作,例如:
bysort familyid: stack stand1-stand10,into(all) keep familyid
我们可以使用与您的数据示例更简单的模拟
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
要使用标识符堆叠,只需重复标识符变量名。对于多个变量,使用循环准备调用是最简单的
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 |
+---------------------------+
也就是说,使用重塑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 |
+--------------------------+
非常感谢你,尼克!调用方法工作得非常好!