这是我的输入数据集:
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;
所有列都不存在的情况我收到错误。如果有其他列,那么我会想念那些。请指教。
由于
答案 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都有一个单独的行。然后你不需要知道有多少变量来解决它。