所以我有一个数据框,如下所示:
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 . .
此处的目的是对列进行求和,即
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.
我确定这不是解决此问题的最佳方法,有人可以帮助我解决该问题吗?提前谢谢。
答案 0 :(得分:1)
您接近了!冒号应位于into
之后的变量之前,并且您将需要用逗号分隔它们。尝试以下方法:
proc sql noprint;
select name
into :cols separated by ','
from dictionary.columns
where upcase(memname) = 'BOX'
;
quit;