Создание новой переменной SAS, которая увеличивается на первую дату переменной ID

#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;