2016-11-10 49 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。或者真的有任何汇总处理。

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

除了Joe的回答,您还可以在proc中使用变量快捷键,例如m1-m4或m :(所有以m开头的变量)。 – Reeza