2016-12-05 53 views
0

我下表總和所有的行,並添加作爲變量(數據步驟)

Row1, 3 
Row2, 5 
Row3, 8 

,我現在要總結所有行,結果將作爲所有行的新的變量,即有

Row1, 3, SUM(Row1,Row2,Row3) 
Row2, 5, SUM(Row1,Row2,Row3) 
Row3, 8, SUM(Row1,Row2,Row3) 

就像總和在SQL SQL會工作...我試過簡單的總和,但只是總結行。有小費嗎?

+0

看看這個帖子http://stackoverflow.com/questions/19759950/summing-vertically-across-rows-under-conditions-sas –

回答

2

首先:在大多數情況下,SQL解決方案或PROC解決方案(您運行PROC MEANS以獲得總和然後將其併入)通常是數據步驟解決方案的首選。使用內置工具通常比編寫自己的工具來複制已有的東西要好。

但是,數據步驟解決方案並不複雜。你只需要使用俗稱的DoW循環(在普及它的兩個人之後)並迭代數據集兩次,一次獲得總和,然後第二次輸出行。您可以通過將until(eof)更改爲until(last.byvar)byvar,無論您正在求和的變量是什麼),並在兩個循環內添加一個帶有byvar的組,byvar,輕鬆地對此進行調整。

data want; 
    do _n_ = 1 by 1 until (eof); 
    set sashelp.class end=eof; 
    sumvar = sum(sumvar,age); 
    end; 
    do _n_ = 1 by 1 until (eof1); 
    set sashelp.class end=eof1; 
    output; 
    end; 
run; 
0

SQL總和將完成此操作並自動將其合併回數據集。

您將在LOG中看到關於合併數據的註釋。

PROC SQL; 
Create table want as 
Select *, sum(variable2sum) as total 
From have; 
Quit; 

編輯: 由於SQL是不是一種選擇,一種比較常見的答案是PROC手段來創造的總和,併合並其下面是該解決方案的代碼以及:

proc means data=sashelp.class noprint; 
    output out=summary mean(age)=avg_age; 
run; 

data class; 
    set sashelp.class; 

    if _n_=1 then 
     set summary; 
    drop _type_ _freq_; 
run; 

proc print data=class; 
run; 
+1

OP明確的要求數據步解決方案,並明確知道SQL之一。 .. – Joe

+0

@Joe我明顯錯過了:) – Reeza

相關問題