【问题标题】:how to remove duplicates in SAS data step如何在 SAS 数据步骤中删除重复项
【发布时间】:2014-02-14 09:10:33
【问题描述】:

如何在 SAS 数据步骤中删除重复项。

data uscpi;
      input year month cpi;
   datalines;
   1990  6 129.9
   1990  7 130.4
   1990  8 131.6
   1990  9 132.7
   1991  4 135.2
   1991  5 135.6
   1991  6 136.0
   1991  7 136.2
   ;
   run;

PROC SORT DATA = uscpi OUT = uscpi_dist NODUPKEY; 
 BY year ; 
 RUN; 

我可以使用 proc 步骤,但如何在数据步骤中删除它。提前致谢

【问题讨论】:

  • 这是一种使用哈希对象的方法:stackoverflow.com/a/5705176/17743
  • 你想保留哪些?仅按“年”执行将随机删除记录。我不认为那是你想要的?

标签: duplicates sas datastep


【解决方案1】:

使用by-group处理时,可以使用SAS创建的first.&last.自动变量。它们可以更好地控制您认为哪一行是重复的。 请阅读手册至understand by group processing in a Data Step

 data uscpi_dedupedByYear;
 set uscpi_sorted;
 by year;
 if first.year; /*only keep the first occurence of each distinct year.  */
 /*if last.year; */ /*only keep the last occurence of each distinct year*/

 run;

很大程度上取决于您的输入数据集的排序对象。例如:如果您的输入数据集按年和月排序并且您使用if first.year;,那么您可以看到它只保留任何给定年份中最早的月份。但是,如果您的数据集按year & descending month 排序,那么if first.year; 将保留任何给定年份的上个月。

这种行为明显不同于nodupkey 的工作方式。

【讨论】:

  • 感谢您的回复。
猜你喜欢
  • 1970-01-01
  • 2022-12-18
  • 2016-11-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-06-26
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多