如何删除没有在SAS中排序的重复记录\观察?

mj0*_*119 10 sorting sas duplicates

我想知道是否有一种方法可以在没有排序的情况下对记录进行重复处理?有时候,我希望保留原始顺序并且只想删除重复的记录.

可能吗?

顺便说一句,以下是我所知道的关于不重复记录的内容,它最终会进行排序.

1.

proc sql;
   create table yourdata_nodupe as
   select distinct *
   From abc;
quit;
Run Code Online (Sandbox Code Playgroud)

2.

proc sort data=YOURDATA nodupkey;    
    by var1 var2 var3 var4 var5;    
run;
Run Code Online (Sandbox Code Playgroud)

cmj*_*hns 16

您可以使用哈希对象来跟踪在通过数据集时看到的值.仅在遇到尚未观察到的密钥时输出.这按照在输入数据集中观察数据的顺序输出.

以下是使用输入数据集"sashelp.cars"的示例.原始数据按Make的字母顺序排列,因此您可以看到输出数据集"nodupes"保持相同的顺序.

data nodupes (drop=rc);;
  length Make $13.;

  declare hash found_keys();
    found_keys.definekey('Make');
    found_keys.definedone();

  do while (not done);
    set sashelp.cars end=done;
    rc=found_keys.check();
    if rc^=0 then do;      
      rc=found_keys.add(); 
      output;              
    end;
  end;
  stop;
run;

proc print data=nodupes;run;
Run Code Online (Sandbox Code Playgroud)


Chr*_*s J 1

/* 给出原始数据集中的每条记录和行号 */
数据 with_id ;
  设置我的数据;
  _id = _n_;
跑步 ;

/* 删除重复项 */
proc 排序数据=with_id nodupkey ;
  通过 var1 var2 var3 ;
跑步 ;

/* 重新排序回原来的顺序 */
proc 排序数据=with_id ;
  通过 _id ;
跑步 ;