使用Do循环的SAS外接接头
我需要找到一种方法来使用循环来联合我的数据集。 例如,我有三个不同列名的表。我想通过使用“外部nuion corr”将它们结合起来。 代码如下所示:使用Do循环的SAS外接接头,sas,Sas,我需要找到一种方法来使用循环来联合我的数据集。 例如,我有三个不同列名的表。我想通过使用“外部nuion corr”将它们结合起来。 代码如下所示: proc sql; create table new as select * from a1 outer union corr select * from b1 outer union corr select * from c1
proc sql;
create table new as
select * from a1
outer union corr
select * from b1
outer union corr
select * from c1 ;
quit;
我想使用loop函数来实现这些并集
%macro union_a;
proc sql;
create table new as
select * from a1
%do i = 2 %to 3;
outer union corr select * from a&i
;
quit;
%end;
%mend;
%union_a;
这给了我一个错误:
NOTE: Line generated by the invoked macro "UNION_A".
5 outer union corr select * from a&i ;
-----
180
ERROR 180-322: Statement is not valid or it is used out of proper order.
我该怎么做?谢谢大家!
JH代码>%结束代码>语句位于错误的位置
%macro union_a;
%local i;
proc sql;
create table new as
select * from a1
%do i = 2 %to 3;
outer union corr select * from a&i
%end;
;
quit;
%mend;
缩进有助于使这一点更清楚。它还有助于缩进宏代码,而不依赖于它生成的SAS代码的缩进
还有,为什么不使用数据步骤呢
data new ;
set a1-a3 ;
run;
%结束代码>语句位于错误的位置
%macro union_a;
%local i;
proc sql;
create table new as
select * from a1
%do i = 2 %to 3;
outer union corr select * from a&i
%end;
;
quit;
%mend;
缩进有助于使这一点更清楚。它还有助于缩进宏代码,而不依赖于它生成的SAS代码的缩进
还有,为什么不使用数据步骤呢
data new ;
set a1-a3 ;
run;
通常是宏中生成分号的问题。为什么不是一个简单的数据步骤?您的数据集有命名约定吗?如果你这样做,集合或附加在这里会更有效。通常是宏中生成分号的问题。为什么不是一个简单的数据步骤?您的数据集有命名约定吗?如果这样做,这里的集合或附加将更有效。