在SAS中,如果我想删除带有重复项的已排序数据,我可以使用proc sort
和noduprecs
选项。并且nodupkey
选项可以通过某些键列删除重复项
例如
proc sort data=HAVE out=WANT nodupkey;by var1, var2;run;
在SQL Server中,我知道select distinct *
可以产生类似proc sort noduprecs
的内容。但是如何生成类似于proc sort nodupkey;by var1, var2
在SAS中的输出?
(如果存在重复项,则返回第一个值)
修改
通过使用max
之类的摘要功能,可以删除重复项,同时返回group by
语句中未指定的最大列。
select key1, max(var1) as var1, key2, key3, max(var2) as var2, max(var3) as var3
from #HAVE
group by key1, key2, key3
但我想要的是返回(var1,var2,var3)的第一个组合。
鉴于
key1 var1 key2 key3 var2 var3
K1 20 K2 K3 30 BB
K1 10 K2 K3 40 AA
理想的输出是
key1 var1 key2 key3 var2 var3
K1 20 K2 K3 30 BB
不是
key1 var1 key2 key3 var2 var3
K1 20 K2 K3 40 AA
答案 0 :(得分:3)
根据你的评论你有一个时间戳,使用这个时间戳可以选择key1,key2,key3的“第一”组合
这是一个为key1,key2,key3的每个组合选择早期数据集的解决方案
;WITH CTE
AS
(
SELECT
key1, var1, key2, key3, var2, var3,
row_number() over (partition by key1, key2, key3 order by timestamp) rn
FROM
#HAVE
)
SELECT
key1, var1, key2, key3, var2, var3
FROM
CTE
WHERE
rn = 1