求SAS中动态列数的总和

时间:2019-06-18 13:47:32

标签: arrays loops sas proc-sql datastep

所以我有一个数据框,如下所示:

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.

我确定这不是解决此问题的最佳方法,有人可以帮助我解决该问题吗?提前谢谢。

1 个答案:

答案 0 :(得分:1)

您接近了!冒号应位于into之后的变量之前,并且您将需要用逗号分隔它们。尝试以下方法:

proc sql noprint;
    select name 
    into :cols separated by ','  
    from dictionary.columns
    where upcase(memname) = 'BOX'
    ;
quit;