MySQL下group_concat函数的SAS实现

MySQL下的字符串聚合函数group_concat是一个非常实用的字符串合并函数,

sas下的宏实现

%macro group_concat(input, output, id, string, length);

data &output (drop=string_old);
set &input (rename=(&string=string_old));
by &id;
retain &string;
length &string $ &length; * set large enough to accommodate the maximum number of records per ID;
if first.&id then &string = '';
brand = catx(',',trim(&string),string_old);
if last.&id then output;
run;

%mend group_concat;

基本表结构如下,

按字母排序的变量和属性列表
# 变量 类型 长度 输出格式 输入格式 标签
2 brand 字符 40 $40. $40. brand
1 customer_id 字符 40 $40. $40. customer_id

宏调用方法,

%group_concat(Last_brands,want,customer_id,brand,300);

对应的MySQL的group_concat是

create table want as 
select customer_id, group_concat(brand) as brand from last_brands group by 1;

P.S.

PostgreSQL下的替代实现是string_agg和array_agg.

references,

How to use GROUP BY to concatenate strings in SAS proc SQL?