Statistics 与状态中的自我合并
我有两组数据,A组和B组,如下所示:Statistics 与状态中的自我合并,statistics,stata,Statistics,Stata,我有两组数据,A组和B组,如下所示: group key val A 0.00 1.23 A 0.25 2.31 A 0.50 3.10 A 0.75 4.21 A 1.00 2.51 A 0.00 1.43 B 0.25 1.31 B 0.50 5.10 B 0.75 2.21 B 1.00 8.51 我想要第四列,称之为Bval,如下所示: 对于B组中的所有观察值,
group key val
A 0.00 1.23
A 0.25 2.31
A 0.50 3.10
A 0.75 4.21
A 1.00 2.51
A 0.00 1.43
B 0.25 1.31
B 0.50 5.10
B 0.75 2.21
B 1.00 8.51
我想要第四列,称之为Bval,如下所示:
对于B组中的所有观察值,该值应缺失
对于A组中的所有观察,该值应与共享同一密钥的B组中观察的val相对应。
我相信这不会太难,但我是一个完全的Stata新手,已经在谷歌上搜索了一个小时,似乎还没弄明白。像这样的东西怎么样
clear
input str1 group key val
A 0.00 1.23
A 0.25 2.31
A 0.50 3.10
A 0.75 4.21
A 1.00 2.51
A 0.00 1.43
B 0.25 1.31
B 0.50 5.10
B 0.75 2.21
B 1.00 8.51
end
preserve
keep if group == "B"
rename val Bval
tempfile b
save `b'
restore
merge m:1 key using `b', nogenerate keep(1 3)
replace Bval = . if group == "B"
像这样的怎么样
clear
input str1 group key val
A 0.00 1.23
A 0.25 2.31
A 0.50 3.10
A 0.75 4.21
A 1.00 2.51
A 0.00 1.43
B 0.25 1.31
B 0.50 5.10
B 0.75 2.21
B 1.00 8.51
end
preserve
keep if group == "B"
rename val Bval
tempfile b
save `b'
restore
merge m:1 key using `b', nogenerate keep(1 3)
replace Bval = . if group == "B"
这也适用于你的例子
. clear
. input str1 group key val
group key val
1. A 0.00 1.23
2. A 0.25 2.31
3. A 0.50 3.10
4. A 0.75 4.21
5. A 1.00 2.51
6. A 0.00 1.43
7. B 0.25 1.31
8. B 0.50 5.10
9. B 0.75 2.21
10. B 1.00 8.51
11. end
. sort key group
. gen Bval = val[_n+1] if group == "A" & group[_n+1] == "B" & key == key[_n+1]
(6 missing values generated)
. l
+---------------------------+
| group key val Bval |
|---------------------------|
1. | A 0 1.23 . |
2. | A 0 1.43 . |
3. | A .25 2.31 1.31 |
4. | B .25 1.31 . |
5. | A .5 3.1 5.1 |
|---------------------------|
6. | B .5 5.1 . |
7. | A .75 4.21 2.21 |
8. | B .75 2.21 . |
9. | A 1 2.51 8.51 |
10. | B 1 8.51 . |
+---------------------------+
这也适用于你的例子
. clear
. input str1 group key val
group key val
1. A 0.00 1.23
2. A 0.25 2.31
3. A 0.50 3.10
4. A 0.75 4.21
5. A 1.00 2.51
6. A 0.00 1.43
7. B 0.25 1.31
8. B 0.50 5.10
9. B 0.75 2.21
10. B 1.00 8.51
11. end
. sort key group
. gen Bval = val[_n+1] if group == "A" & group[_n+1] == "B" & key == key[_n+1]
(6 missing values generated)
. l
+---------------------------+
| group key val Bval |
|---------------------------|
1. | A 0 1.23 . |
2. | A 0 1.43 . |
3. | A .25 2.31 1.31 |
4. | B .25 1.31 . |
5. | A .5 3.1 5.1 |
|---------------------------|
6. | B .5 5.1 . |
7. | A .75 4.21 2.21 |
8. | B .75 2.21 . |
9. | A 1 2.51 8.51 |
10. | B 1 8.51 . |
+---------------------------+
工作起来很有魅力。非常感谢。工作起来很有魅力。非常感谢。美好的我的具体问题实际上比我发布的示例要复杂一些,对于更复杂的问题@mdb的解决方案实际上效果更好。但是你教了我一些关于Stata的知识,这些知识将来可能会派上用场,所以谢谢!你能简明扼要地描述一下并发症吗?另一种技术是egen Bval2=meanval/group==B,bykey。在同一领域内,请参阅此技巧和其他技巧的介绍。很好!我的具体问题实际上比我发布的示例要复杂一些,对于更复杂的问题@mdb的解决方案实际上效果更好。但是你教了我一些关于Stata的知识,这些知识将来可能会派上用场,所以谢谢!你能简明扼要地描述一下并发症吗?另一种技术是egen Bval2=meanval/group==B,bykey。请参阅,以了解在同一地区对这一技巧和其他技巧的描述。