2016-11-12 37 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; 
; 

なぜ同じ情報を渡す2つのマクロパラメータがありますか?あなたは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

関連する問題