Рассчитать продолжительность между датами по группам, используя SAS - PullRequest
0 голосов
/ 20 октября 2019

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

enter image description here

Для каждого человека (ID) мне нужно рассчитать продолжительность (end_date-start_date). Тем не менее, мне также необходимо применить правило, которое гласит, что если между датой окончания и датой начала одного и того же типа фостерного ухода меньше 5 дней, его следует рассматривать как одно последовательное размещение. Если между датой окончания и датой начала одного и того же типа приемной семьи для одного и того же лица существует более пяти дней, это новое место размещения. Если это новый тип приемной семьи, это новое место. Переменная «длительность» - это то, как, как это должно быть рассчитано.

Я пробовал следующий код, но он не работает должным образом + Я не знаю, как применить свои «пять дней»"-rule.

Proc sort data=have out=want;
by id type descending start_date;
run;

Data want;
set want;
by id type;
retain last_date;
if first.id or first.type then do;
   last_date=end_date;
end;  
if last.id or last.type then duration=(end_date-start_date);
run;

Любая помощь очень ценится!

1 Ответ

1 голос
/ 20 октября 2019

Используя здесь несколько операторов retain, чтобы достичь этого:

data want;
  set have;

  by id ;

  retain true_sd prev_ed prev_type;

  if first.id then call missing(prev_type);

  if type ~= prev_type then do;
     true_sd = sd;
     call missing(prev_ed);
     call missing(prev_type);
  end;

  if sd - prev_ed > 5 then true_sd = sd;

  duration = ed - true_sd;
  output;

  prev_type = type;
  prev_ed = ed;

  format sd ed true_sd prev_ed date.;


 run;

(при условии, что здесь тип и id здесь числовые. Ed это end_date, sd это start_date)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...