合并宏内的输出数据

时间:2017-10-30 14:22:08

标签: sas

我有问题。我正在使用宏对我正在阅读的3个文件应用相同的分析。我的挑战是如何合并宏中的3个文件。我想知道是否有人有想法。请参阅以下代码。

%macro data(sub);

data &sub._err1;
set &sub._err;
 keep pasecure flag1;
 run;

proc sort data=&sub._err1; by pasecure; run;

data new;
merge;
by pasecure;
run;

%mend data;
%data(Alg);%data(Bio);%data(Lit);run;

感谢您的时间和投入,

1 个答案:

答案 0 :(得分:0)

%macro data(sub1, sub2, sub3);

%do i=1 %to 3;
  data &&sub&i.._err1 (rename=(flag1=flag_&&sub&i..));
  set &&sub&i.._err;
  keep pasecure flag1;
  run;

  proc sort data=&&sub&i.._err1; by pasecure; run;
%end;

data new;
merge %do i=1 %to 3; &&sub&i.._err1 %end;;
by pasecure;
run;

%mend data;
%data(Alg,Bio,Lit);

或更灵活:

%macro data(sub=);

%let sub_out=;
%do i=1 %to %sysfunc(countw(&sub.));
  %let tbl=%scan(&sub.,&i.);
  data &tbl._err&i (rename=(flag1=flag_&tbl.));
  set &tbl._err;
  keep pasecure flag1;
  run;

  proc sort data=&tbl._err1; by pasecure; run;
  %let sub_out=&sub_out. &tbl._err1;
%end;

data new;
merge &sub_out.;
by pasecure;
run;

%mend data;
%data(sub=Alg Bio Lit);

请注意,我重命名了flag1个变量,因为如果要将它们保留在合并数据集中,它们不能全部具有相同的名称。