2016-12-12 2 views
2
PROC SQL; 
    CREATE TABLE SET3 AS 
    SELECT 
     a.VAR1 , b.VAR1 AS P_VAR1 , 
     a.VAR2   
    FROM SET1 AS a FULL JOIN SET2 AS B 
    ON a.VAR1 = b.VAR1 
; 
QUIT; 

위의 코드는 SET3이라는 테이블을 만들고 VAR2와 함께 2 개의 데이터 세트의 VAR1과 함께 a.VAR1 = b.VAR1 인 VAR1을 포함합니다.SAS SQL

나는이 코드가 사용할 수있는 경우 VAR2 를 포함하는 실행하려는. 때로는 그렇지 않으므로 코드가 충돌합니다.

일부 매크로를 사용하여 코드를 두 번 작성하여이 작업을 수행 할 수 있지만 사용할 수있는 빠른 SQL 구문이 있는지 궁금해하고있었습니다.

감사합니다.

답변

2

하나의 옵션은 존재 여부에 따라 VAR1 또는 VAR1, VAR1을 갖는 매크로 변수를 만드는 것입니다. dictionary.columns은 얻을 수있는 메타 데이터 테이블이며 proc sql에서 볼 수 있습니다.

최종 데이터의 순서는 약간 다릅니다 (a.VAR1, a.VAR2, b.VAR1). 문제가되지 않을 것으로 예상됩니다.

proc sql noprint; 
select cats('a.',name) into :varlist separated by ',' 
from dictionary.columns 
where libname='WORK' and memname='SET1' and name in ('VAR1','VAR2'); 
quit; 

%put &=varlist.; 

PROC SQL; 
    CREATE TABLE SET3 AS 
    SELECT 
     &varlist. , b.VAR1 AS P_VAR1 
    FROM SET1 AS a FULL JOIN SET2 AS B 
    ON a.VAR1 = b.VAR1 
; 
QUIT; 
+0

이 줄은 무엇입니까? % 넣기 = = varlist .; 또는 당신은 의미합니까 : % put & varlist .; –

+1

그냥 & varlist의 값을 넣습니다. 로그에 저장하십시오. '% put & = varlist.'는'% put VARLIST = & varlist.'를 코딩하는 바로 가기 방법입니다. – Longfish

+0

OK! 이 설명에 감사드립니다. –