2013-05-22 2 views
1

나는 이런 식으로 뭔가를 시도했다 :SAS에서 simoultaneusly throught 두 세트를 반복하는 방법은 무엇입니까?

data wynik; 
set dane; 
if x>3 than x3=3*x; 
else set dane2; x3=x2;set dane; 
run; 

덴마크와 dane2 행

결과가 흥미 롭다 같은 수 있습니다 - 조건 x>3 여전히 dane2을 설정 한 후 들고 있지만, SAS는 항상 먼저 관찰을 걸립니다 - 즉 숨겨진 루프 카운터의 현재 상태를 전달하지 않습니다. 질문 : SAS는 사용자가 액세스 할 수있는 데이터 세트를 반복하면서 카운터에 숨겨진 루프를 사용합니까?

editon : 가 mayby ​​내가 제목에 추가해야합니다 - expicit 루프하지 않고 있지만,이 또한 몇 가지 가정 만들기

+1

테이블 중 하나가 너무 크지 않으면 해시 객체를 사용하여 수동으로 반복 할 수 있습니다. –

+0

@Rob Penridge 비 프로그래머를위한 sas 해시 객체에 대한 가장 좋은 소개는 무엇입니까? – Qbik

+0

이 팁 시트 (http://support.sas.com/rnd/base/datastep/dot/hash-tip-sheet.pdf)에 제시된 예제부터 시작하겠습니다. 그 다음이 두 논문은 해시 테이블 (http://www2.sas.com/proceedings/sugi30/236-30.pdf)과 (http://www2.sas.com/proceedings/forum2008/)의 유연성에 대한 훌륭한 예제를 제공합니다. 029-2008.pdf). 상대적으로 코딩이 편한 경우 해시 테이블은 놀랄 수 있으며 보는 것처럼 무섭지 않습니다! 내가 생각하는 다른 게시물을 보면 괜찮을거야. BTW - 팁 시트가 해시 테이블 질문이있을 때마다 팁 시트가 도움이됩니다. –

답변

3

환영합니다 : 사이드 바이 사이드 병합을 사용

data dane; 
do x = 1 to 5; 
output; 
end; 
run; 

data dane2; 
do x2 = 5 to 1 by -1; 
output; 
end; 
run; 

data wynik; 
merge dane dane2; 
if x > 3 then x3=3*x; 
else x3=x2; 
put x3=; 
run; 

을 (병합 by 문없이) 한 번에 두 값을 모두 얻을 수 있습니다.

는 후속 질문에 대답하려면 :

하지 SAS 사용자가 액세스 할 수있는 데이터 세트를 반복하면서 카운터/사용 숨겨진 루프가?

예, 그렇습니다. _n_은 현재 루프 반복을 정의합니다 (외부에서 수정되지 않는 한 - 데이터 집합에 쓰지 않는 일반 변수 일뿐입니다). 그래서 당신은 유사하게 다음 작업을 수행 할 수 있습니다 : 당신은 매우 자주 DANE2 볼 필요하지 않는 한이 빨리되기 때문에

data wynik; 
set dane; 
if x > 3 then x3=x*3; 
else do; 
    set dane2 point=_n_; 
    x3=x2; 
end; 
put x3=; 
run; 

사이드 바이 사이드 병합 바람직하다. 코드 작성도 쉽습니다.

+1

이 두 가지 모두 동일한 문제, 즉 가변적 인 중복의 위험이 있음은 물론입니다. 두 데이터 집합간에 겹치는 변수가있는 경우 원하는 결과를 얻고 있는지 확인하거나 DROP, KEEP 또는 RENAME 문을 사용하여 문제가 발생하는지 확인해야합니다. – Joe

관련 문제