【问题标题】:Remove all instances of duplicates in SAS删除 SAS 中的所有重复实例
【发布时间】:2014-10-06 04:27:21
【问题描述】:

我正在按 ID 号合并两个 SAS 数据集,并希望删除所有重复 ID 的实例,即如果一个 ID 号在合并的数据集中出现两次,则具有该 ID 的 both 观察将被删除.

网络搜索建议了一些 sql 方法和 nodupkey,但这些方法不起作用,因为它们用于典型的重复清理,其中保留一个实例,然后删除多个实例。

【问题讨论】:

  • 您是在合并(添加列)还是追加(添加行)?
  • 为什么这个标签是“sql”?
  • 如果您在数据中提供之前和之后的示例,这个问题会更好。
  • 感谢所有响应者。我追加而不是合并,因为正如 Pekka 指出的那样,合并会隐藏数据集间的重复。

标签: sas


【解决方案1】:

假设您正在使用带有 BY id 的 DATA 步;声明,然后添加:

if NOT (first.id and last.id) then delete;

应该这样做。如果这不起作用,请出示您的代码。

实际上,我非常喜欢将删除的记录写入单独的数据集,这样您就可以跟踪在不同点删除了多少条记录。所以我会这样编码:

data want
     drop_dups
;
  merge a b ;
  by id ;
  if first.id and last.id then output want ;
  else output drop_dups ;
run ;

【讨论】:

    【解决方案2】:

    这是一种 SQL 方法。您可以使用最适合您需要的左/右/内连接。请注意,这同样适用于单个数据集。

    proc sql;
        create table singles as 
        select * from dataset1 a inner join dataset2 b
        on a.ID = b.ID
        group by a.ID
        having count(*) = 1;
    quit;
    

    例如来自

    ID  x
    5   2
    5   4
    1   6
    2   7
    3   6
    

    你会选择

    ID  x
    1   6
    2   7
    3   6
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-02-02
      • 2019-10-16
      • 2021-11-03
      • 2011-06-17
      • 2021-05-13
      • 1970-01-01
      • 1970-01-01
      • 2021-01-06
      相关资源
      最近更新 更多