Создание новой переменной SAS, которая увеличивается на первую дату переменной ID - PullRequest
1 голос
/ 29 марта 2019

Я пытаюсь создать новую переменную, которая увеличивается по дням на основе первой даты переменной 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

Ответы [ 2 ]

0 голосов
/ 29 марта 2019

Ты довольно близко здесь. При ссылке first.datevar результирующее значение будет либо 1, либо 0 (т. Е. Истина или ложь). Вместо этого вам нужно будет 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;
0 голосов
/ 29 марта 2019

Вам необходимо сохранить первое значение в отдельной переменной, которая не обновляется. 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;
...