我有一个绝望的问题:)我想将数据按sas的proc sql中的2列进行分组。
这里是例子
A B C
--------------------------
John Smith 5
Smith John 4
Adam Gibbs 3
我想要的结果是:
A B C
---------------------------
John Smith 9
Adam Gibbs 3
我想对2个可能具有切换值的列中的值进行分组。
无论“边”是什么值,只要它们在2列中相同即可。这些是字符列,因此不能使用最小或最大功能。请帮助!!!)
答案 0 :(得分:1)
您可以这样表示聚合:
proc sql;
select (case when a < b then a else b end) as a,
(case when a < b then b else a end) as b,
sum(c)
from t
group by (case when a < b then a else b end),
(case when a < b then b else a end);
请注意,这可以返回不在原始数据中的对。如果有问题,可以使用:
proc sql;
select a, b, sum(c)
from ((select a, b
from t
where a < b or
not exists (select 1 from t t2 where t2.a = t.b and t2.b = t.a)
) union all
(select b, a
from t
where b < a and
exists (select 1 from t t2 where t2.a = t.b and t2.b = t.a
)
) t
group by a, b;