取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;