Как создать столбцы, используя значения из одного столбца в SQL (PRO C SQL в SAS) - PullRequest
0 голосов
/ 25 февраля 2020

Я использую PRO C SQL на SAS.

Таблица слева - та, что у меня есть. Я хочу создать таблицу справа, то есть создать столько столбцов, сколько существует разных значений для столбца «значение» (они известны, и только 3 из них: «a», «b» и «c») ,

Это значение из "col". Если он не существует для соответствующего «значения», значение по умолчанию равно 0. Я пытался использовать GROUP BY и CASE, но я все еще получал таблицу с 6 строками.

Tables

Заранее спасибо.

Ответы [ 2 ]

0 голосов
/ 25 февраля 2020

Рассмотрим proc_transpose, который является динамическим c для любой длины значений:

** TRANSPOSING DATA SET;
proc sort data=input out=input;
    by id;
run;

proc transpose data=input out=input_transposed(drop=_name_) prefix=col_;
    by id;          
    var col;    
    id value;
run;

SAS Output

Чтобы заменить пропущенные нули, переберите массивы чисел c столбцов для вызова coalesce. Опять же, это масштабируется до сотен потенциальных столбцов:

data input_transposed;
    set input_transposed;

    array num(*) _numeric_;
    do _n_ = 1 to dim(num);
    num(_n_) = coalesce(num(_n_), 0);
end;

SAS Table Output

0 голосов
/ 25 февраля 2020

В SAS вы можете использовать proc sql:

proc sql;
    select id,
           sum(case when value = 'a' then col else 0 end) as col_a,
           sum(case when value = 'b' then col else 0 end) as col_b,
           sum(case when value = 'c' then col else 0 end) as col_c
    from t
    group by id;
...