Для этого можно использовать обработку по группам и функцию сохранения.
Создание образца набора данных:
data have;
input id value $3.;
cards;
1 A
1 B
1 C
1 D
2 E
2 F
3 S
3 A
4 C
5 Y
6 II
6 UU
6 OO
6 N
7 G
7 H
;
run;
Сначала убедитесь, что ваш набор данных отсортирован по переменной id:
proc sort data=have;
by id;
run;
Затем используйте обозначения first.
и last.
, чтобы определить, когда переменная id изменяется или собирается измениться. Оператор retain
указывает шагу данных сохранять значение в пределах concatenated_value
над наблюдениями, а не сбрасывать его в пустое значение. Используйте функцию quote()
, чтобы применить символы "
вокруг результата перед выводом записи. Используйте функцию cats()
для выполнения фактической конкатенации и разделения записей с помощью ,
.
data want;
length contatenated_value $500.;
set have;
by id;
retain contatenated_value ;
if first.id then do;
contatenated_value = '';
end;
contatenated_value = catx(',', contatenated_value, value);
if last.id then do;
contatenated_value = quote(cats(contatenated_value));
output;
end;
drop value;
run;
Выход:
contatenated_
value id
"A,B,C,D" 1
"E,F" 2
"S,A" 3
"C" 4
"Y" 5
"II,UU,OO,N" 6
"G,H" 7