我有问题。我正在使用宏对我正在阅读的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;
感谢您的时间和投入,
答案 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
个变量,因为如果要将它们保留在合并数据集中,它们不能全部具有相同的名称。