2014-04-16 3 views
2

이것은 StackOverflow의 첫 번째 질문입니다. 제 질문이 닦이지 않거나 명확하지 않으면 미리 사과드립니다.R에서 병합 : SAS 병합 출력 옵션과 유사한 옵션을 찾으십시오.

SAS에서 병합 할 때 일치하지 않는 행을 대체 데이터 세트로 출력 할 수 있습니다. 이 경우 예를 들어

,

data matched nomatch_a nomatch_b; 
    merge A(in=a) B(in=b); 
    by var; 
    if a and b then output matched; 
    else if a and not b then output nomatch_a; 
    else if b and not a then output nomatch_b; 

:
- 성공적으로 일치
에 출력된다 병합 행 - B에 일치하지 않은 데이터 집합 A의 행은 nomatch_a에 출력된다
- A에서 일치하지 않은 데이터 세트 B의 행이 nomatch_b에 출력됩니다.

나는 R과 비슷한 것을하려고합니다. 단 하나의 라이너 일 필요는 없지만 우아한 해결책을 원합니다. all.x, all.y 옵션이 있다는 것을 알고 있지만, 원하는 옵션을 얻기 위해 옵션을 조정할 수는 없습니다. 나는 당신의 생각에 감사 할 것입니다!

+0

병합 하시겠습니까? 데이터 프레임, 벡터, 행렬 등? 입력 및 출력 데이터가 R처럼 직접 읽을 수 있어야하는 작은 예제를 만드는 데 도움이 될 것입니다. – Joe

답변

1
#if a and b then output matched; 

matched <- merge(a,b, by= "var") 

'all'인수는 기본적으로 FALSE이며 이는 "내부 조인"을 제공합니다.

# else if a and not b then output nomatch_a; 

nomatch_a <- a[ !a$var %in% unique(b$var) , ] 

# else if b and not a then output nomatch_b; 

nomatch_b <- b[ !b$var %in% unique(a$var) , ] 

두 번째 두 지정은 논리 벡터를 구성하고 "["함수를 사용하여 TRUE 행에 대한 전체 행을 추출합니다. 모든 라이너가 있다고는 생각하지 않지만 SAS 프로 시저를 단 한 번의 라이너로 사용할 수는 없습니까? 먼저 all=TRUE을 사용하고 "전체 외부 조인"값에서 유사한 추출을 수행 할 수 있다고 가정합니다.하지만 어쨌든 위와 같이하는 것이 더 간단 해 보입니다.