SAS: как я могу проверить стабильность значения во времени

У меня есть эта база данных:

data temp;
input ID monitoring_date score ;
  datalines;
 1 10/11/2006   0      
 1 10/12/2006   0      
 1 15/01/2007   1      
 1 20/01/2007   1
 1 20/04/2007   1

 2 10/08/2008   0        
 2 11/09/2008   0        
 2 17/10/2008   1        
 2 12/11/2008   0 

 3 10/12/2008   0 
 3 10/08/2008   0        
 3 11/09/2008   0        
 3 17/10/2009   1        
 3 12/12/2009   1    
 3 05/01/2010   0  

 4 10/12/2006   0 
 4 10/08/2006   0        
 4 11/09/2006   0        
 4 17/10/2007   0        
 4 12/12/2007   0    
 4 09/04/2008   1  
 4 05/08/2008   1

 5 10/12/2013   0 
 5 03/09/2013   0        
 5 11/09/2013   0        
 5 19/10/2014   0        
 5 10/12/2014   1    
 5 14/01/2015   1  

 6 10/12/2017   0 
 6 10/08/2018   0        
 6 11/09/2018   0        
 6 17/10/2018   1        
 6 12/12/2018   1    
 6 09/04/2019   1  
 6 25/07/2019   0
 6 05/08/2019   1
 6 15/09/2019   0
 ;

Я хотел бы создать новую базу данных с новым столбцом, где я отмечаю для каждого идентификатора дату первого прогресса оценки от 0 до 1 и если этот прогресс стабилен, по крайней мере, за 3 месяца до конца мониторинга еще дата_прогресс = . :

data want;
input ID   date_progression;
  datalines;
 1            15/01/2007
 2            .
 3            .
 4            09/04/2008
 5            .
 6            .
 ;

Я действительно понятия не имею, как это кодировать, и я хотел бы получить нужные данные для создания модели cox, где прогрессия (Да/Нет) является моим событием. Я действительно застрял!

Заранее спасибо за вашу помощь!


person sdhaoui    schedule 05.05.2020    source источник
comment
Вы код, который вы разместили? Пожалуйста, запустите свой первый шаг данных и проверьте, что он возвращает.   -  person Reeza    schedule 05.05.2020
comment
Как вы определяете стабильность? Это набор жестких правил или он основан на изменениях во времени? Какова приемлемая прогрессия от 0 до 1?   -  person Stu Sztukowski    schedule 05.05.2020
comment
Почему id=4, date=90/04/2008 отображается как стабильное? С 1 всего 4 два месяца. Может ли идентификатор иметь несколько стабильных «зон» или только в конце своих дат? Является ли date_progression датой начала выполнения 1s, которое заканчивается в последнюю дату идентификатора?   -  person Richard    schedule 06.05.2020
comment
@Richard есть разница в 3 месяца для идентификатора 4: с 04.09.2008 по 08.05.2008, где оценка равна 1, поэтому мы сохраняем дату первого изменения оценки с 0 до 1. (04.09.2008), потому что пациент находится в конце наблюдения и оценка не снизилась до 0.   -  person sdhaoui    schedule 06.05.2020


Ответы (1)


Цикл DOW может обрабатывать группы ID, отслеживая один активный прогон 1 с. Прогон имеет дату начала и продолжительность.

Пример:

data want;
  do _n_ = 1 by 1 until (last.id);
    set have;
    by id;

    select;
      when (pscore = 0 and score = 1) do; state = 1; start = date; dur = 1; end;
      when (pscore = 1 and score = 1) do; state = 2;               dur + 1; end;
      when (pscore = 1 and score = 0) do; state = 3; start = .;    dur = .; end;
      when (pscore = 0 and score = 0) do; state = 4;                        end;
      otherwise;
    end;

    pscore = score;
  end;

  if state = 2 and dur >= 3 then progression_date = start;

  keep ID progression_date;
  format progression_date yymmdd10.;
run;
person Richard    schedule 06.05.2020
comment
Большое спасибо @Richard!! это именно то, что я хочу получить! - person sdhaoui; 06.05.2020
comment
Если вы можете получить несколько показаний монитора в месяц или широко разнесенные показания ‹ 3 (например, ID 4), вы должны использовать критерии назначения для учета диапазона дат if ... AND date-start >= 90 then progression_date = start;. В этом контексте dur — это длина цикла в количестве наблюдений. - person Richard; 06.05.2020