我有2个宏,我试图一个接一个地执行,就像在数据步骤中使用元数据表和调用执行命令一样.
宏%TWO需要全局变量&names_agg.应该在宏%ONE中创建.但是在下面的代码中,&names_agg在我第一次运行时是空白的.如果我再次运行它,它将只保留上次运行时的值.
这个想法是,每次运行%ONE时,都会有一个新的&names_agg.被建造.
我究竟做错了什么?
谢谢
%macro ONE(condition);
%global names_agg;
%let names_agg = ;
proc sql;
select
cats(name,"_agg"),
into
:names_agg separated by " ",
from dataset
where condition = "&condition."
;
quit;
%mend;
%macro TWO(name_OT);
data &name_OT.;
set &names_agg.;
run;
%mend;
data _null_;
length code $32767;
set meta_table;
code = "%ONE(" || cats(condition) || "); %TWO(" || cats(Name_OT) || ");";
call execute(code);
run;
Run Code Online (Sandbox Code Playgroud)
对于凌乱的日志感到抱歉,这是实际的代码.问题在于NAMES_AGG_A _B和_C无法正确解析
871 data test;
872 length code $32767;
873 set c.new_name_OT (obs=1);
874 code = '%OT_Append(' || …Run Code Online (Sandbox Code Playgroud) sas ×1