#sas
#sas
Вопрос:
Я пытаюсь создать новую переменную, которая увеличивается на дни на основе первой даты переменной ID в SAS.
Я пытался использовать intck, но безрезультатно. Ниже приведен мой код:
DATA want;
SET have;
LENGTH NEWVAR 8.;
by IDVAR DATEVAR;
RETAIN NEWVAR ;
if first.IDVAR then newvar =0 ;
if first.DATEVAR then NEWVAR = intck('day',first.DATEVAR,'continuous') 1;
RUN;
Это набор данных, который я хочу создать:
IDVAR DATEVAR NEWVAR
1 1-Jan-18 1
1 2-Jan-18 2
1 5-Jan-18 5
1 6-Jan-18 6
1 1-Feb-18 32
1 3-Feb-18 34
2 2-Jan-18 1
2 3-Jan-18 2
Ответ №1:
Вам нужно сохранить первое значение в отдельной переменной, которая не обновляется. FIRST.<var>
это специальная переменная флага, которая будет либо 0
, либо 1
. Она не принимает значение переменной.
DATA want;
SET have;
LENGTH NEWVAR 8.;
by IDVAR DATEVAR;
RETAIN first_date_for_id ;
if first.IDVAR then first_date_for_id = datevar ;
NEWVAR = intck('day',datevar, first_date_for_id,'continuous') 1;
label newvar = 'Days since id started';
drop first_date_for_id;
RUN;
Комментарии:
1. Большое вам спасибо! Это сработало, хотя я переключил datevar и first_date_for_id, чтобы заставить newvar увеличиваться в другом направлении.
Ответ №2:
Вы здесь довольно близко. При обращении first.datevar
результирующее значение будет либо 1, либо 0 (т. е. true или false). Вместо этого вам нужно будет retain
ввести первую datevar.
DATA want;
SET have;
LENGTH NEWVAR 8.;
by IDVAR DATEVAR;
RETAIN firstdate;
if first.IDVAR then do;
firstdate = datevar;
end;
NEWVAR = intck('day',firstdate,datevar) 1;
RUN;