data aaa;
input x y;
cards;
1 2
3 4
;
run;
%macro aaa;
data _null_;
set aaa;
do i=1 to 2;
if _N_ =i then do;
call symput('Value',x);
call symput('TagValue',y);
%put &value;
%put &tagvalue;
end;
end;
run;
%mend;
%aaa;
结果为3 4,而不是1 2 3 4。 如何循环以从数据集中检索值?谢谢!
答案 0 :(得分:0)
通常,宏变量在数据步骤完成之后才可用,因此只有最后的值可用。
你可以使用解析功能解决这个问题,但这取决于你整体尝试做什么。
%macro aaa;
data _null_;
set aaa;
do i=1 to 2;
if _N_ =i then do;
call symput('Value',x);
call symput('TagValue',y);
x=resolve('&Value');
y=resolve('&TagValue');
put x;
put y;
end;
end;
run;
%mend;
%aaa;
答案 1 :(得分:0)
您只使用两个宏变量来保存4个值。 最简单的方法是使用proc sql(tutorial here)的INTO:语句。
复制并粘贴以下代码以获得我认为您想要的内容:
data aaa;
input x y;
cards;
1 2
3 4
;
run;
proc sql noprint;
select x,y into:value1-:value2, :tagValue1 - :tagValue2
from aaa;
quit;
%macro print_macro_variables;
%put value - tagvalue;
%put 1: &value1 - &tagValue1;
%put 2: &value2 - &tagValue2;
%mend;
答案 2 :(得分:0)
data aaa;
input x y;
cards;
1 2
3 4
;
run;
%macro aaa;
data _null_;
set aaa;
macroVar = 'Value'||put(_N_,1.);
call symput(macroVar,x);
macroVar = 'TagValue'||put(_N_,1.);
call symput(macroVar,y);
run;
%do sufx=1 %to 2;
%put Value&sufx is &&Value&sufx;
%put TagValue&sufx is &&TagValue&sufx;
%mend;
%aaa;
将导致
Value1 is 1;
TagValue1 is 2;
Value2 is 3;
TagValue2 is 4;
如果您的后缀超过9,则需要写macroVar = 'Value'||strip(put(_N_,8.));
另请参阅http://www2.sas.com/proceedings/sugi22/CODERS/PAPER77.PDF
答案 3 :(得分:0)
我找到了解决方案。 sas macro getvalue