options mprint mlogic symbolgen ;
%macro origin ;
data check ;
set sashelp.class ;
call symputx("local"||strip(put(_n_,best.)), name) ;
run ;
%let cnt = &sysnobs. ;
data check_one (keep = name macro_resolve );
set check ;
%do i= 1 %to &cnt. ;
if age = 16 then do ;
macro_resolve = symget("local&i.");
end;
%end ;
%symdel local&i. ;
run;
%mend origin ;
%origin ;
宏中的第一步创建 19 个宏变量(“NAME”变量中的 19 个观察值) 在第二步中,我想使用由该观察创建的特定宏变量来满足条件。
第二个数据步骤中的
%do
循环不相关,因为它与数据步骤循环重叠。这样做的一个可能的问题是对变量位置的依赖。使用主键来索引变量更有用。
这对我有用:
options mprint mlogic symbolgen;
%macro origin ;
data check ;
set sashelp.class ;
call symputx("local"||strip(put(_n_,best.)), name) ;
run ;
%let cnt = &sysnobs. ;
data check_one (keep = name age macro_resolve );
set check ;
if age = 16 then do;
macro_resolve = symget(catt("local", put(_n_, 8. -l)));
end;
run;
%mend origin ;
%origin ;