Stata中更新的暴露变量

Stata中更新的暴露变量,stata,Stata,我试图通过4次访问一项研究,为更新后的体重指数(bmi)创建一个变量。我尝试了下面的方法,但它只列出了上次访问的值。我的数据格式广泛,其中visit_v1=1如果参与者参加了第1次访问,并且bmi_v1=bmi参加了第1次访问。我希望bmi\u su等于bmi\u v1如果visit\u v1=1,bmi\u v2如果visit\u v2==1,等等。我有什么想法不对吗 gen bmi_su = . replace bmi_su = bmi_v4 if visit_v4==1 replace

我试图通过4次访问一项研究,为更新后的体重指数(
bmi
)创建一个变量。我尝试了下面的方法,但它只列出了上次访问的值。我的数据格式广泛,其中
visit_v1=1
如果参与者参加了第1次访问,并且
bmi_v1=bmi
参加了第1次访问。我希望
bmi\u su
等于
bmi\u v1
如果
visit\u v1=1
bmi\u v2如果visit\u 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

你是否寻求这样的东西:

. 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 |
  +------------------------------------------------------------------+

在长数据结构或形状(有人说是格式)中,面板数据或纵向数据通常要好得多

在您的案例中,定义意味着最后一次测量将胜过早期测量,因此不清楚您为何会感到惊讶

下面是一些更系统的计算方法。首先,

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' 
}

如果缺失(bmi_su)或
如果缺失(bmi_su2)
则考虑上述变量,而不是所示的
if
条件

你的问题看起来很简单,但对我来说,还不清楚。您是否介意重新表述和/或添加有关数据结构的信息(例如,它现在如何以及您希望它如何)。您在文本中提到了
bmi
,但代码中没有提到。