取SAS中动态列数的总和
Take sum of dynamic number of columns in SAS
所以我有一个数据框,如下:
Obs ID A B C D
1 X1 1 . . .
2 X2 1 1 . .
3 X3 . 1 1 .
4 X4 . 1 . .
5 X5 . 1 . .
6 X6 1 . . .
7 X7 1 1 . .
8 X8 1 1 . .
9 X9 . . 1 .
10 X10 1 1 . .
这里的objective是对列求和即
Total=sum(A,B,C,D)
但是这里的问题是列的数量和名称不会固定。因此,我想创建一个数组来动态存储列名,删除 id 列,然后对其余列求和。因此我写了一个命令如下:
proc sql noprint;
select
name into: cols
from dictionary.columns
where
memname = 'box';quit;
但是我得到如下错误:
Statement is not valid or it is used out of proper order.
我确定这不是解决此问题的最佳方法,有人可以帮助我解决这个问题吗?提前致谢。
你很接近!冒号应该在 into
之后的变量之前,您需要用逗号分隔它们。试试这个:
proc sql noprint;
select name
into :cols separated by ','
from dictionary.columns
where upcase(memname) = 'BOX'
;
quit;
所以我有一个数据框,如下:
Obs ID A B C D
1 X1 1 . . .
2 X2 1 1 . .
3 X3 . 1 1 .
4 X4 . 1 . .
5 X5 . 1 . .
6 X6 1 . . .
7 X7 1 1 . .
8 X8 1 1 . .
9 X9 . . 1 .
10 X10 1 1 . .
这里的objective是对列求和即
Total=sum(A,B,C,D)
但是这里的问题是列的数量和名称不会固定。因此,我想创建一个数组来动态存储列名,删除 id 列,然后对其余列求和。因此我写了一个命令如下:
proc sql noprint;
select
name into: cols
from dictionary.columns
where
memname = 'box';quit;
但是我得到如下错误:
Statement is not valid or it is used out of proper order.
我确定这不是解决此问题的最佳方法,有人可以帮助我解决这个问题吗?提前致谢。
你很接近!冒号应该在 into
之后的变量之前,您需要用逗号分隔它们。试试这个:
proc sql noprint;
select name
into :cols separated by ','
from dictionary.columns
where upcase(memname) = 'BOX'
;
quit;