2016-11-12 3 views
0

다음 코드를 통해 여러 개의 개별 데이터 집합을 병합하고 싶습니다. 그러나 오류로보고합니다 : enter image description here 이 문제를 어떻게 해결할 수 있습니까?SAS- 여러 데이터 집합 병합

%macro test(sourcelib=,from=); 
proc sql noprint; /*read datasets in a library*/ 
    create table mytables as 
    select * 
    from dictionary.tables 
    where libname = &sourcelib 
    order by memname ; 

    select count(memname) 
    into:obs 
    from mytables; 

    %let obs=&obs.; 

    select memname 
    into : memname1-:memname&obs. 
    from mytables; 
quit; 


data full; 
set 
%do i=1 %to &obs.; 
    &from.&&memname&i; 
%end; 
; 
run; 
%mend; 

%test(sourcelib='RESULT',from=RESULT.); 

답변

1

귀하의 %DO 루프는 SET 문장의 중간에 추가 세미콜론을 생성한다.

set 
%do i=1 %to &obs.; 
    &from.&&memname&i 
%end; 
; 

왜 동일한 정보를 전달할 두 개의 매크로 매개 변수가 있습니까? libref를 전달할 수 있어야합니다. 또한 왜 많은 매크로 변수를 만들면 될까요?

%macro test(sourcelib=); 
%local memlist ; 
proc sql noprint; 
    select catx('.',libname,memname) into :memlist separated by ' ' 
    from dictionary.tables 
    where libname = %upcase("&sourcelib") 
    order by 1 
    ; 
quit; 

data full; 
    set &memlist ; 
run; 
%mend; 

%test(sourcelib=ReSulT); 
+0

'order by 1' 조항이 유용합니까? – Quentin

+1

원래 코드와 마찬가지로 멤버 이름으로 값을 정렬합니다. 'order by memname'을 사용하면 SAS는 결과 집합에없는 열로 주문하는 메모를 작성합니다. – Tom

+0

Nifty. 나는 보통 그 메모를 무시한다고 생각합니다. – Quentin