2016-11-12 426 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

它按照原始代码中的成员名称排序值。如果您使用'memname命令',则SAS会写入一条笔记,表明您正在按列排序而不在结果集中。 – Tom

+0

俏皮。我想我通常只是忽略那个笔记。 – Quentin