2014-10-29 3 views
1

SAS에서는 중복 된 데이터를 제거하려면 proc sortnoduprecs 옵션과 함께 사용할 수 있습니다. 그리고 nodupkey 옵션이 몇 가지 키 열 SQL Server의 키 열별로 중복 제거

SQL 서버에서 예컨대

proc sort data=HAVE out=WANT nodupkey;by var1, var2;run; 

하여 중복을 제거 할 수 있습니다, 나는 select distinct *proc sort noduprecs 같은 것을 생성 할 수 있습니다 알고 있습니다. 그러나 SAS에서 proc sort nodupkey;by var1, var2과 같은 출력을 생성하는 방법은 무엇입니까? 이러한 열의 최대 않은 리턴 될 것이다 group by 문을 지정된 동안 는 중복 제거 할 수 max 같이 요약 연료 소모량을 사용하여

EDIT

(중복이 존재하는 경우 제 1 값을 리턴).

select key1, max(var1) as var1, key2, key3, max(var2) as var2, max(var3) as var3 
from #HAVE 
group by key1, key2, key3 

하지만 내가 원하는 것은 (var1, var2, var3)의 첫 번째 조합을 반환하는 것입니다.

key1 var1 key2 key3 var2 var3 
K1 20 K2 K3 30 BB 
K1 10 K2 K3 40 AA 

을 감안할 때 이상적인 출력은 "이를 선택 할 수 있습니다이 타임 스탬프를 사용하여, 당신은 타임 스탬프를 가지고 귀하의 코멘트에 따르면

key1 var1 key2 key3 var2 var3 
K1 20 K2 K3 30 BB 

하지

key1 var1 key2 key3 var2 var3 
K1 20 K2 K3 40 AA 
+0

, 키 1, 키 2의 각 조합에 대한 earliers 데이터 세트를 선택하는 솔루션입니다겠습니까 당신을 위해 *** *** 테이블에서 DISTINCT 1 열, 2 열을 선택 사용할 수 있습니까? –

+0

다른 컬럼을'select' 문에 포함시킬 필요가 없습니까? – Lovnlust

+1

key1, key2, key3의 첫 번째 조합과 같은 것은 없습니다. 이것은 단지 말이되지 않습니다. 어쩌면 자동 증가 Id 열 또는 타임 스탬프 –

답변

3

입니다 첫 번째 "key1, key2, key3의 조합

여기

는 KEY3

;WITH CTE 
AS 
(
SELECT 
    key1, var1, key2, key3, var2, var3, 
    row_number() over (partition by key1, key2, key3 order by timestamp) rn 
FROM 
    #HAVE 
) 
SELECT 
    key1, var1, key2, key3, var2, var3 
FROM 
    CTE 
WHERE 
    rn = 1 
+0

경우 구문을 이해하지 못합니다. 'row_number()'는 함수입니까? 데이터에 '타임 스탬프'라는 기존 열이 없습니다. 행 인덱스를 'timestamp'로 얻기 위해 모든 함수를 사용할 수 있습니까? 왜';와 같이 ..()'? – Lovnlust

+0

@GMTG 방금 데이터를 타임 스탬프별로 정렬했다고 썼습니다. 주문할 칼럼이없는 경우에는 해결할 수 없습니다. 데이터가 테이블에 정렬 된 순서는 무작위로 보일 수는 없지만이 순서에 의존 할 수는 없습니다 –

+0

여기에 사용 된 SQL 구문 중 일부 ('row_number()', 'over' 및'partition by ')는 지원되지 않습니다 SAS의'proc sql'에 있습니다. 다른 dbms에 대한 통과 쿼리 내에서 작동 할 수도 있습니다. – user667489