2016-12-13 17 views
0

Oracle 데이터베이스에로드 될 테이블이 있습니다. 데이터의 순서를 변경하지 않고 반복되는 값을 삭제해야합니다. 각 그룹에 대해 5 개의 가능한 레코드가 있습니다. 1. 빈 행을 제거해야합니다. 2. 중복 된 이름은 제거해야하므로 고유 한 이름 만 나타납니다. 3. 데이터를 재정렬 할 수 없습니다.SAS에서 반복 레코드 삭제

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 
+0

'반복 행'이란 무엇입니까? 당신의 결과는 무엇입니까? 너 뭐하려고? – Joe

+0

반복 가능한 행은 일반적으로 행 1, 행 1은 데이터를 섞어서, 연방 정부는 또한 행 2도 반복합니다. 그리고 때로는 행 3도 마찬가지입니다. 나는 first.last 함수, coalescec 및 selfjoin 및 오프셋을 시도하고 있습니다. – user601828

+0

다음과 같이 할 수 있습니다. 첫 번째 단계 => a 고유 변수 만 선택하려면 고유 선택을 클릭 한 다음 모든 변수가 누락 된 경우 두 번째 단계 => 행을 삭제하십시오. –

답변

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; 
+0

조, 고마워요! 직장에 아무도이 문제를 해결할 수 없습니다. 너 굉장하다. 다시 한 번 감사드립니다. – user601828