переменная, показывающая наибольшее значение, достигнутое другой переменной, записанной до настоящего времени, с течением времени - PullRequest
0 голосов
/ 10 мая 2018

У меня есть набор данных пациентов и их данные о пациентах, связанных с алкоголем, с течением времени (в годах), как показано ниже

clear
input long patid float(year cohort)
1051 1994 1
2051 1972 1
2051 1989 2
2051 1990 2
2051 2000 2
2051 2001 3
2051 2002 1
2051 2003 2
8051 1995 1
8051 1996 1
8051 2003 1
end
label values cohort cohortlab
label define cohortlab 0 "general population" 1 "no alcohol data" 2 "indeterminate" 3 "non-drinker" 4 "low_risk" 5 "hazardous" 6 "AUD" , replace

Я хотел бы создать переменную, которая показывает самый высокий уровень кода алкоголя, который имеетДо сих пор использовался в любой (год) точке в истории болезни пациента, так что набор данных был бы как ниже:

clear
input long patid float(year cohort highestsofar)
1051 1994 1 1
2051 1972 1 1
2051 1989 2 2
2051 1990 2 2
2051 2000 2 2
2051 2001 3 3
2051 2002 1 3
2051 2003 2 3
8051 1995 1 1
8051 1996 1 1
8051 2003 1 1
end
label values cohort cohortlab
label values highestsofar cohortlab
label define cohortlab 0 "general population" 1 "no alcohol data" 2 "indeterminate" 3 "lifetime_abstainer" 4 "low_risk" 5 "hazardous" 6 "AUD" , replace

Ответы [ 2 ]

0 голосов
/ 10 мая 2018

Спасибо за понятный пример и вопрос.

Проблема уже описана в разделе часто задаваемых вопросов здесь на веб-сайте StataCorp.Вот однострочное решение с использованием rangestat от SSC.

clear
input long patid float(year cohort)
1051 1994 1
2051 1972 1
2051 1989 2
2051 1990 2
2051 2000 2
2051 2001 3
2051 2002 1
2051 2003 2
8051 1995 1
8051 1996 1
8051 2003 1
end
label values cohort cohortlab
label define cohortlab 0 "general population" 1 "no alcohol data" 2 "indeterminate" 3 "non-drinker" 4 "low_risk" 5 "hazardous" 6 "AUD" , replace

rangestat (max) highestsofar = cohort, interval(year . 0) by(patid) 

list, sepby(patid) 

     +-------------------------------------------+
     | patid   year            cohort   highes~r |
     |-------------------------------------------|
  1. |  1051   1994   no alcohol data          1 |
     |-------------------------------------------|
  2. |  2051   1972   no alcohol data          1 |
  3. |  2051   1989     indeterminate          2 |
  4. |  2051   1990     indeterminate          2 |
  5. |  2051   2000     indeterminate          2 |
  6. |  2051   2001       non-drinker          3 |
  7. |  2051   2002   no alcohol data          3 |
  8. |  2051   2003     indeterminate          3 |
     |-------------------------------------------|
  9. |  8051   1995   no alcohol data          1 |
 10. |  8051   1996   no alcohol data          1 |
 11. |  8051   2003   no alcohol data          1 |
     +-------------------------------------------+
0 голосов
/ 10 мая 2018

Я хотел бы предложить ответ:

by patid: g highestsofar=cohort if cohort>cohort[_n-1]|_n==1
by patid: replace highestsofar=highestsofar[_n-1] if cohort<=cohort[_n-1]&_n>1
by patid: replace highestsofar=highestsofar[_n-1] if (highestsofar<highestsofar[_n-1]) & ((cohort>cohort[_n-1])&_n>1)

label values highestsofar cohortlab

Я был бы рад, если бы можно было обсудить более компактный синтаксис.

Спасибо

...