Подсчет идентификатора и присвоение года

У меня есть набор данных, который выглядит так:

data have;
input ID P1 P2 P3 P4;
datalines;

ID    P1    P2    P3    P4
12    10    15    20    30
12    -     20    5     3
12    -     -     25    33
12    -     -     -     30
19    10    15    20    30
19    -     10    17    30
19    -     -     5     30
19    -     -     -     30
;
run;

Я пытаюсь создать переменную с именем Year, которую затем можно использовать для определения того, что идентификатор и P1-P4 представляют собой массив, каждая строка которого представляет год. Таким, как будет выглядеть набор данных.

data want;
set have;
input ID P1 P2 P3 P4;
datalines;

ID    P1    P2    P3    P4 Year
12    10    15    20    30 2017
12    -     20    5     3  2018
12    -     -     25    33 2019
12    -     -     -     30 2020
19    10    15    20    30 2017
19    -     10    17    30 2018
19    -     -     5     30 2019
19    -     -     -     30 2020
;
run;

Первоначально я использовал этот код:

Data Year;
    do ID = 1 to 8;
        do Year = 2017 to 2020;
        output;
        end;
    end;
run;

data Final;
set have;
Merge Year;
run;

Но теперь, когда я каждый раз работаю с другим набором данных и не знаю структуру идентификатора, я не могу каждый раз менять ID=1 на 8, чтобы он соответствовал набору данных.

Мой вопрос: есть ли способ сделать это через набор данных, возможно, подсчет?

Count ID = 2017;
Year = count + 1;

person 78282219    schedule 16.03.2018    source источник


Ответы (1)


Нет необходимости создавать второй набор данных, который будет объединен с первым.

Вам нужно сделать предположения о группировке в наборе данных have. Предполагается, что данные уже отсортированы или упорядочены таким образом, что позволяет присвоить монотонное значение года каждой последовательной строке в каждой группе.

data want;
  set have;
  by id;
  if first.id 
    then year = 2017; %* initial year for a group;
    else year + 1; %* increment year for subsequent rows of a group;
run;
person Richard    schedule 16.03.2018
comment
Смарт, сейчас попробую - person 78282219; 19.03.2018