2016-11-10 57 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