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會工作...我試過簡單的總和,但只是總結行。有小費嗎?
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會工作...我試過簡單的總和,但只是總結行。有小費嗎?
首先:在大多數情況下,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;
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;
看看這個帖子http://stackoverflow.com/questions/19759950/summing-vertically-across-rows-under-conditions-sas –