【问题标题】:Take sum of dynamic number of columns in SAS取SAS中动态列数的总和
【发布时间】:2019-06-18 13:47:32
【问题描述】:

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

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.

我确定这不是解决此问题的最佳方法,任何人都可以帮助我解决这个问题吗?提前非常感谢。

【问题讨论】:

  • 如果要求和的列总是在列顺序内形成一个连续的块,你可以sum(of a--d)
  • 这里列出了一些可以缩短该列表的方法:blogs.sas.com/content/iml/2018/05/29/…
  • 嗨,User667489..列名不一定是动态的。
  • DICTIONARY.* 表返回的 LIBNAMEMEMNAME 的元数据值始终为大写。

标签: arrays loops sas proc-sql datastep


【解决方案1】:

你已经接近了!冒号应该在into 之后的变量之前,并且您需要用逗号分隔它们。试试这个:

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

【讨论】:

  • 嗨斯图,谢谢你的回答。但是当我写 %put &cols. - 我收到警告:明显的符号引用 COLS 未解析。知道为什么吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-11-18
  • 1970-01-01
  • 2023-03-16
  • 1970-01-01
相关资源
最近更新 更多