如何将多行合并为一行(字符串)

时间:2018-05-21 17:09:37

标签: sql join sas

我有一个表,每个TRIP有多行。每行在不同的列中都有不同的标志值。但是,该值始终为“Y”或null。我想将所有相同的TRIP组合并或分组为一行,同时必须保留flag的值。以下是示例: Left table to right table

正如我们所看到的,左边的表格(表A)是最初以StaffNo,Trip和Doc为键的原始表格。但是,我想要的是从表中删除StaffNo和Doc成为右边的那个(表B)。

在表A(左)。注意旅行。 我想从表A中删除Doc和StaffNo但保留Flag值 查看表A中的第1行到第3行。将这3行的标志值与表B第1行进行比较。

正如我们所看到的,我希望将属于同一行程的多行的标志值合并为仅一行。

有没有办法或解决方法呢?

2 个答案:

答案 0 :(得分:1)

您可以使用UPDATE语句折叠跨行的非缺失值。 UPDATE语句需要主数据集和事务数据集。对于这个问题,您可以将数据用于两者。

data want ;
  update have(obs=0) have ;
  by trip ;
  keep trip flag: ;
run;

答案 1 :(得分:0)

如果必须使用sql,group trip和max(flag),则字母大于缺失值。

proc sql;
   select trip,max(flagA) as flagA,max(flagB) as flagB,max(flagC) as flagC,max(flagD) as flagD from have group by trip;
quit;