SAS PROC SQL — объединение значений переменных в одно значение по группе

У меня есть набор данных, который содержит значения «фактора» и соответствующие значения «ответа»:

data inTable;
  input fact $ val $;
  datalines;
  a 1
  a 2
  a 3
  b 4
  b 5
  b 6
  c 7
  d 8
  e 9
  e 10
  f 11
;
run;

Я хочу агрегировать варианты ответов по факторам, т.е. мне нужно получить

желаемая выходная таблица

Я прекрасно знаю, как реализовать это на шаге данных, выполняя цикл по значениям и применяя CATX (опубликовано здесь). Но могу ли я сделать то же самое с PROC SQL, используя комбинацию GROUP BY и некоторый символьный аналог SUM() или CATX()?

Спасибо за помощь,

Дмитрий


person Dmitry D. Onishchenko    schedule 22.11.2017    source источник


Ответы (1)


Шаг данных — это подходящий инструмент для использования в SAS, если вы хотите применить любую логику, которая переносит множество значений вперед из предыдущих строк.

Любое решение SQL было бы чрезвычайно громоздким — вам нужно было бы n раз присоединять входную таблицу к самой себе, где n — максимальное количество различных значений для любого из ваших факторов, и вам также нужно было бы определить последовательный ключ, сохраняющий порядок строк. использовать для соединения.

Список функций агрегирования, которые вы можете использовать в proc sql, доступен здесь: http://support.sas.com/kb/25/279.html

Хотя некоторые из них работают с символьными переменными, функция агрегирования для конкатенации строк отсутствует.

person user667489    schedule 22.11.2017
comment
MIN(), MAX() и COUNT() будут работать с символьными переменными. - person Tom; 22.11.2017