Есть несколько способов сделать это.
data have;
input spend age_bucket $ multiplier $;
datalines;
10 18-24 2x
120 18-24 2x
1 35-54 3x
10 35-54 2x
;
proc summary data=have;
var spend;
class age_bucket multiplier;
output out=temp sum=;
run;
Сначала вы можете использовать PROC SUMMARY
для расчета агрегации, сумма в этом случае для переменной в вопросе. Оператор CLASS
дает вам вещи, на которые можно рассчитывать. Это рассчитает суммы N-Way, а набор выходных данных будет содержать их все. Запустите код и посмотрите на набор данных temp
.
Далее вы можете использовать PROC TRANSPOSE
для поворота стола. Нам нужно использовать инструкцию BY
, поэтому необходим PROC SORT
. Я также фильтрую скопления, о которых вы заботитесь.
proc sort data=temp(where=(_type_=3));
by multiplier;
run;
proc transpose data=temp out=want(drop=_name_);
by multiplier;
var spend;
id age_bucket;
idlabel age_bucket;
run;
В традиционном режиме 35-54
не является допустимым SAS имя переменной. SAS преобразует ваши столбцы в собственные имена. Метка на переменной сохранит исходное значение. Просто имейте в виду, если вам нужно будет ссылаться на переменную позже, имя изменилось на допустимое.
Proc Tabulate также мощный для построения таблиц типа шарнирных с конкретными агрегатами. – Reeza