SAS Сохранить / заполнить с помощью групп - PullRequest
1 голос
/ 29 января 2020

Интересно, есть ли в SAS элегантный путь к go от набора данных к набору данных без создания дополнительных переменных (даже временных).

В основном лог c заключается в заполнении значений в столбце вниз. Каждая новая группа инициализирует процесс заново.

data have;
  input a $ val1 val2 val3;
  datalines;
a 1 . .
a . . .
a . 2 .
a . . .
a . . 3
a . . . 
b . . .
b . 5 .
b . . .
;
run;  

Желаемые результаты:

data want;
  input a $ val1 val2 val3;
  datalines;
a 1 . .
a 1 . .
a 1 2 .
a 1 2 .
a 1 2 3
a 1 2 3 
b . . .
b . 5 .
b . 5 .
;
run;  

1 Ответ

1 голос
/ 29 января 2020

Вы можете использовать инструкцию UPDATE, чтобы сделать это. Оператор UPDATE предназначен для применения транзакций к исходному набору данных, который имеет уникальный ключ. Вы можете использовать свой отдельный набор данных в качестве источника и данных транзакции, используя опцию набора данных OBS = 0, поэтому вы начинаете с пустого набора исходных данных. Если вы добавите явный оператор вывода, вы можете создать желаемый результат вместо обычного наблюдения для каждой группы.

data want;
  update have(obs=0) have;
  by a ;
  output;
run;
...