我有一个表,每个TRIP有多行。每行在不同的列中都有不同的标志值。但是,该值始终为“Y”或null。我想将所有相同的TRIP组合并或分组为一行,同时必须保留flag的值。以下是示例:
正如我们所看到的,左边的表格(表A)是最初以StaffNo,Trip和Doc为键的原始表格。但是,我想要的是从表中删除StaffNo和Doc成为右边的那个(表B)。
在表A(左)。注意旅行。 我想从表A中删除Doc和StaffNo但保留Flag值 查看表A中的第1行到第3行。将这3行的标志值与表B第1行进行比较。
正如我们所看到的,我希望将属于同一行程的多行的标志值合并为仅一行。
有没有办法或解决方法呢?
答案 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;