Взять сумму динамического количества столбцов в SAS - PullRequest
0 голосов
/ 18 июня 2019

Итак, у меня есть поле данных, как показано ниже:

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 Ответ

1 голос
/ 18 июня 2019

Ты близко!Двоеточие должно быть перед переменной после into, и вы захотите разделить их запятой.Попробуйте вместо этого:

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