Sas 如何循环从数据集中检索值
结果是34,而不是1234。Sas 如何循环从数据集中检索值,sas,Sas,结果是34,而不是1234。 如何循环从数据集中检索值?谢谢大家! 通常,宏变量在数据步骤完成后才可用,因此只有最后的值可用 您可以使用resolve函数来解决这个问题,但这取决于您总体上要做什么 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);
如何循环从数据集中检索值?谢谢大家! 通常,宏变量在数据步骤完成后才可用,因此只有最后的值可用 您可以使用resolve函数来解决这个问题,但这取决于您总体上要做什么
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;
您仅使用两个宏变量来保存4个值。 最简单的方法是使用proc sql()的INTO:语句 复制并粘贴以下代码以获得我认为您想要的:
%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;
将导致
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;
如果后缀超过9,则需要编写macroVar='Value'| | strip(put(_N|,8.)代码>
另请参见我找到了解决方案。
请澄清您的期望。&Value
应该是13
还是&TagValue
应该是24
?您是否希望&Value
和&TagValue
成为数组(这是不可能的,但您可以创建&Value1
,&Value2
&TagValue1
和&TagValue2
然后写入%Do后缀=1%到2;blablablablablablabla;%end;
)?也许你应该向我们解释一下你以后想用它们做什么。
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;