检查列是否存在,然后在SAS中求和

时间:2014-06-24 15:20:41

标签: 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%休息 纽约市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;

所有列都不存在的情况我收到错误。如果有其他列,那么我会想念那些。请指教。

由于

2 个答案:

答案 0 :(得分:0)

如果您总是想要汇总所有数字列,那么就这样做:

col_A0 / sum(of _numeric_)

答案 1 :(得分:0)

我不会使用SQL,但会使用常规的datastep。

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

如果您想在SQL中执行此操作,最简单的方法是以垂直格式保留(或转换)数据集,即每个变量每个ID都有一个单独的行。然后你不需要知道有多少变量来解决它。