SAS 删除带有空白的重复值

SAS removing duplicate values with blanks

提问人:unluckyforsome 提问时间:11/16/2023 最后编辑:unluckyforsome 更新时间:11/16/2023 访问量:36

问:

我需要从SAS中删除带有空白的值的重复值: 示例数据如下

火柴 名字 出生日期 编号
紫色 John 220985 1
John 220985 1
绿 唐尼 安缦 210784 2
蒂龙 史密斯 010295 3
绿 蒂龙 史密斯 010295 3

我想删除具有相同 id 的空格匹配项。有些使用 id 列删除空白的重复项

重复的 SAS

评论


答:

0赞 Stu Sztukowski 11/16/2023 #1

首先,按 排序。这将确保缺失值在每个组中排在第一位,而所需的值是组中的最后一个值:id matchid

proc sort data=have;
    by id match;
run;
Match   forename    surname dob     id
        John        will    220985  1
purple  John        will    220985  1 <----- value we want
green   donny       aman    210784  2 <----- value we want
        tyrone      smith   10295   3
Green   tyrone      smith   10295   3 <----- value we want

由于非缺失值始终是组中的最后一个值,因此我们可以使用 on 和 use 来仅输出每个 ID 组中的最后一个值。idlast.id

data want;
    set have;
    by id match;
    if(last.id);
run;

这个“if without then”表示“除非它是 ID 组中的最后一个值,否则不要继续。由于在边界处隐含,因此 SAS 不会输出行,除非它是组中的最后一个 ID。换句话说,只输出我们想要的每个值。outputrun

Match   forename    surname dob     id
purple  John        will    220985  1
green   donny       aman    210784  2
Green   tyrone      smith   10295   3