2016-10-05 7 views
2

У меня есть три столбца в наборе данных: spend, age_bucket и multiplier. Данные выглядит что-то вроде ...Как создать сводную таблицу в SAS?

spend age_bucket multiplier 
10  18-24  2x 
120  18-24  2x 
1  35-54  3x 

Я хотел бы набор данных с колоннами, как возрастное ведро, строки, как мультипликаторы, и запись в виде суммы (или другую агрегатной функцию) от расходов колонка. Есть ли proc для этого? Могу ли я легко выполнить это с помощью proc SQL?

+0

Proc Tabulate также мощный для построения таблиц типа шарнирных с конкретными агрегатами. – Reeza

ответ

2

Есть несколько способов сделать это.

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 преобразует ваши столбцы в собственные имена. Метка на переменной сохранит исходное значение. Просто имейте в виду, если вам нужно будет ссылаться на переменную позже, имя изменилось на допустимое.

enter image description here

Смежные вопросы