2014-06-24 48 views
0

這是我的輸入數據集:檢查一列存在,然後總和SAS

Ref Col_A0 Col_01 Col_02 Col_aa Col_03 Col_04 Col_bb 
NYC 10  0  44  55  66  34  44 
CHG 90  55  4  33  22  34  23 
TAR 10  8  0  25  65  88  22 

我需要計算Col_A0的%爲特定的參考。 比如%col_A0將作爲

10/(10+0+44+55+66+34+44)=.0395 i.e. 3.95% 

計算所以我的輸出應該

參考%Col_A0%其他 NYC 3.95%96.05% CHG 34.48%,65.52% TAR 4.58%95.42%

我可以做這部分,但問題是列變量。 Col_A0和Ref是固定列,因此它們每次都會在輸入中出現。但其他專欄不會在那裏。還有一些額外的列,如Col_10,col_11直到col_30和col_cc直到col_zz。 例如輸入數據在某些情況下設置可以只是:

Ref Col_A0 Col_01 Col_02 Col_aa Col_03 
NYC 10  0  44  55  66 
CHG 90  55  4  33  22 
TAR 10  8  0  25  65 

那麼,有一種方法,我可以寫一個SAS代碼進行檢查,看是否該列存在與否。或者如果還有其他更好的方法來做到這一點。

這是我在企業指南中編寫的當前SAS代碼。

PROC SQL; 
CREATE TABLE output123 AS 
select 
ref, 
(col_A0/(Sum(Col_A0,Col_01,Col_02,Col_aa,Col_03,Col_04,Col_bb)) FORMAT=PERCENT8.2 AS PERCNT_ColA0, 
(1-(col_A0/(Sum(Col_A0,Col_01,Col_02,Col_aa,Col_03,Col_04,Col_bb))) FORMAT=PERCENT8.2 AS PERCNT_Rest 
From Input123; 
quit; 

所有列都不存在的情況我得到一個錯誤。如果有更多的列,那麼我想念那些。請指教。

感謝

回答

0

我不會用SQL,但將使用普通datastep。

data want; 
set have; 
a0_prop = col_a0/sum(of _numeric_); 
run; 

如果你想這樣做在SQL中,最簡單的方法是保持(或改造)的數據集,垂直格式,即每個變量每個ID單獨一行。那麼你不需要知道有多少變量可以解決。

+0

有兩列a0_prop和數字。但都是空白的。 – learnlearn10

+0

嘗試添加我不小心遺漏的_ ...這與Keith上面所嘗試的相同,只是它在datastep中工作('_numeric_'是一個包含所有數字變量的自動變量列表)。 – Joe

+0

對不起。現在明白了。數字後我錯過了一個下劃線。完美的作品。 – learnlearn10

0

如果你總是要總結所有的數值列,然後就去做:

col_A0/sum(of _numeric_) 
+0

出錯22-322 ........ _________ 錯誤22-322:語法錯誤,期待以下其中一項:!,!!,&,(,*,**,+ ,',', - ,'。',/,<, <=, <>,=,>,> =,?,AND, CONTAINS,EQ,EQT,GE,GET,GT,GTT,LE,LET,LIKE,LT,LTT ,NE,NET,OR = – learnlearn10

+0

使用此代碼PROC SQL; CREATE TABLE output123 AS SELECT ref,(col_a0/sum(of _numeric_))as test – learnlearn10

+0

I do not,認爲'_numeric_'在SQL中可用,是嗎? – Joe

相關問題