删除SAS中的重复记录

时间:2016-12-13 18:32:25

标签: sas repeat

我有一个表将被加载到oracle数据库中。 我需要删除重复值而不更改数据的顺序。 每组有5种可能的记录。 1.需要删除空行。 2.需要删除重复的名称,因此只显示不同的名称。 3.数据无法重新排序。

chkstk.obj

1 个答案:

答案 0 :(得分:1)

这是HASH对象的一个​​很好的用例。如果您使用multidata:'n'ref方法,它将检查记录是否已经在哈希表中,如果没有,则添加它 - 但不添加重复项。

这里我添加rownum以便能够返回到原始的排序顺序,因为哈希表是二叉树,除非你强加它,否则没有自然顺序。

data have;
input @1 line $50.;
datalines;
1   Commingled Data
2   Social Security
3   
4   
5   SSA  1996
1   Commingled Data
2   Social Security 
3   
4   
5   SSA 1997
1   Commingled Data
2   Social Security
3   
4   
5   SSA  -1998
1   Commingled Data
2   Statistical Administrative 
3   
4   
5   StARS 2000
1   Federal
2    Treasury
3   Internal 
4   1099
5   Master File - TY 1997 (1099/IRMF)
1   Federal 
2    Treasury
3   Internal 
4   1099
5   Master File - TY 1998 (1099/IRMF)
1   State
2    Wage
3   Indiana
4   
5    Indiana - 1990Q1-2005Q2
1   Federal 
2    Treasury
3   Internal 
4   1040
5    TY 2003 (1040/IMF) 1% File
1   Federal 
2    Treasury
3   Internal
4   1040
5   TY 2003 (1040/IMF) Cycles 1-39
;;;;
run;

data _null_;
  set have end=eof;
  rownum = _n_;
  if _n_=1 then do;
    declare hash h(ordered:'n', multidata:'n');
    h.defineKey('line');
    h.defineData('line', 'rownum');
    h.defineDone();
  end;
  if not missing(substr(line,3)) then rc = h.ref();
  if eof then do;
    h.output(dataset:'want');
  end;
run;

proc sort data=want;
  by rownum;
run;