Создание переменных с годами на основе даты начала и окончания - PullRequest
0 голосов
/ 28 августа 2018

Мне нужно создать переменные, которые будут отмечать, в какие годы пациенту проводилось лечение. У меня есть набор данных, который выглядит следующим образом (данные включают периоды лечения, поэтому 1 пациент может иметь несколько рядов различных видов лечения):

ID / atc_label / sdate / enddate

1 / VitD / 31 октября 2005 г. / 24 января 2005 г.

1 / Стероид / 31 октября 2008 г. / 24 января 2015 г.

2 / Стероид / 15 октября 2005 г. / 21 декабря 2010 г.

3 / системный / 15 октября 2007 г. / 21 декабря 2010 г.

...

Мне нужно создать переменные 2005, 2006, 2007, 2008, 2009 .. до 2018 года, которые будут содержать правильное значение atc_label, если лечение использовалось в течение этого года.

Я начал с функции Year, но я не знаю, как создать промежуточные переменные между начальной и конечной датой. Буду признателен за любые идеи, как решить эту проблему.

Ответы [ 2 ]

0 голосов
/ 29 августа 2018

Мне понадобилось время, чтобы понять, как заставить код работать.

Вот мое решение, которое делает то, что мне нужно:

data want;
set have;

*calculate start and end years based on dates;
year_start =year(stdt);
year_end = year(enddt);

run;


data want;
set have;

*declare array variables to hold flags;
array flags(2010:2018)$ flag2010-flag2018;

*set to missing to avoid carry over from previous line;
call missing(of flags(*));

*loop and set years to 1 between year start and end;
 do year = year_start to year_end by 1;
 flags(year) = atc_label;
end;

run;
0 голосов
/ 28 августа 2018

Самый простой способ - с массивом, индексированным по годам.

data want;
set have;

*declare array variables to hold flags;
array flags(2000:2018) flag2000-flag2018;

*set to missing to avoid carry over from previous line;
call missing(of flags(*));

*calculate start and end years based on dates;
year_start =year(sdate);
year_end = year(enddate);

*loop and set years to 1 between year start and end;
do year=year_start to year_end;
    flags(year) = 1;
end;

run;
...