【问题标题】:SAS-multiple datasets mergingSAS-多个数据集合并
【发布时间】:2017-03-26 18:22:33
【问题描述】:

我想通过以下代码合并几个单独的数据集。但是,它报告错误为: 我该如何解决这个问题?

%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.);

【问题讨论】:

    标签: loops macros sas


    【解决方案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);
    

    【讨论】:

    • order by 1 子句是否有用?
    • 它按照原始代码中的成员名称对值进行排序。如果您使用order by memname,那么 SAS 会写一条说明,说明您正在按不在结果集中的列进行排序。
    • 漂亮。我想我通常只是忽略那个注释。
    猜你喜欢
    • 1970-01-01
    • 2018-05-04
    • 1970-01-01
    • 1970-01-01
    • 2020-12-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-03
    相关资源
    最近更新 更多