2016-11-10 3 views
0

У меня есть таблица, которая будет иметь переменное количество столбцов на основе моего начального ввода. Есть ли функция для суммирования всех числовых столбцов этой таблицы без указания имени каждого столбца?Как суммировать все числовые столбцы в таблице в SAS?

Прямо сейчас у меня есть имя каждого столбца, жестко закодированное в команде proc sql.

CREATE TABLE &new_table_name AS 
(SELECT SUM(CASE WHEN col1 = &state THEN 1 ELSE 0 END) AS month_01, 
     SUM(CASE WHEN col2 = &state THEN 1 ELSE 0 END) AS month_02, 
     SUM(CASE WHEN col3 = &state THEN 1 ELSE 0 END) AS month_03, 
     SUM(CASE WHEN col4 = &state THEN 1 ELSE 0 END) AS month_04, 
     SUM(CASE WHEN col5 = &state THEN 1 ELSE 0 END) AS month_05 
); 

ввода образца будет выглядеть так:

name m1 m2 m3 m4 
aa  1 7 7 1 
ab  2 4 2 
ac  1 1  
ad  1 3 1 1 
ae  2 1 3 

Затем выходной образец будет

name m1 m2 m3 m4 
     7 16 13 2 
+0

Если у вас нет имен, вам нужно создать динамический запрос. –

+0

Опубликовать образцы данных, в/из. Интересно, не должно ли это быть транспозиция proc. Ваш код кажется не связанным с указанным вопросом. Вы не можете использовать списки переменных в PROC SQL. – Reeza

+0

Матрица, на которую я пытаюсь сделать сумму, - это набор данных транспонирования. –

ответ

2

Вы ищете PROC MEANS. Или действительно любое обобщение proc.

data have; 
infile datalines missover; 
input name $ m1 m2 m3 m4; 
datalines; 
aa  1 7 7 1 
ab  2 4 2 
ac  1 1  
ad  1 3 1 1 
ae  2 1 3 
;;;; 
run; 

proc means data=have; 
    output out=want sum=; 
run; 

И class заявление позволит группировать государством или любой другой. WHERE также отлично работает в PROC MEANS для фильтрации.

Оставляя var заявление от вызовов для всех числовых переменных, или вы можете поместить в var заявлении ограничения, такие как

var m1-m4; 

, как Reeza отмечает в комментариях.

+1

В дополнение к ответу Джо вы можете использовать переменные ярлыки в procs, такие как m1-m4 или m: (все переменные, начинающиеся с m). – Reeza