Sas 如何循环从数据集中检索值

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);

结果是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);
        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;