我正在尝试通过4次研究访问为更新的体重指数(bmi
)创建一个变量。我已经尝试了以下但它只列出了上次访问的价值。如果参与者在访问1时出现visit_v1 = 1
,在访问1时出现bmi_v1 = bmi
,我的数据格式为bmi_su
。如果bmi_v1
,我希望visit_v1=1
等于bmi_v2 if visit_v2==1
,gen bmi_su = .
replace bmi_su = bmi_v4 if visit_v4==1
replace bmi_su = bmi_v3 if visit_v3==1 & visit_v4==0
replace bmi_su = bmi_v2 if visit_v2==1 & visit_v4==0 & visit_v3==0
replace bmi_su = bmi_v1 if visit_v1==1 & visit_v4==0 & visit_v3==0 & visit_v2==0
等。我出错的任何想法?
{{1}}
答案 0 :(得分:0)
你是否寻求这样的事情:
. clear all
. set more off
.
. * Assumed data structure
. input ///
> id bmi visit1 visit2 visit3 bmi1 bmi2 bmi3
id bmi visit1 visit2 visit3 bmi1 bmi2 bmi3
1. 1 20 1 0 0 20 0 0
2. 1 . 0 1 0 0 25 0
3. 1 . 0 0 1 0 0 28
4. end
.
. list, noobs
+----------------------------------------------------------+
| id bmi visit1 visit2 visit3 bmi1 bmi2 bmi3 |
|----------------------------------------------------------|
| 1 20 1 0 0 20 0 0 |
| 1 . 0 1 0 0 25 0 |
| 1 . 0 0 1 0 0 28 |
+----------------------------------------------------------+
.
. * What you want?
. gen bmisu = bmi1 + bmi2 + bmi3
.
. list, noobs
+------------------------------------------------------------------+
| id bmi visit1 visit2 visit3 bmi1 bmi2 bmi3 bmisu |
|------------------------------------------------------------------|
| 1 20 1 0 0 20 0 0 20 |
| 1 . 0 1 0 0 25 0 25 |
| 1 . 0 0 1 0 0 28 28 |
+------------------------------------------------------------------+
答案 1 :(得分:0)
在长数据结构或形状(有人说格式)中,面板或纵向数据通常要好得多。
在您的情况下,定义意味着最后一次测量将胜过早期测量,因此不清楚为什么您会感到惊讶。
以下是一些更系统的计算方法。首先,
gen bmi_su = bmi_v4
forval j = 3(-1)1 {
replace bmi_su = bmi_v`j' if visit`j'
}
第二,
gen bmi_su2 = bmi_v1
forval j = 2/4 {
replace bmi_su2 = bmi_v`j' if visit`j'
}
还要考虑上面的变体if missing(bmi_su)
或if missing(bmi_su2)
,而不是显示的if
条件。