SAS宏分辨率调用symputx(获取当前行)

时间:2013-11-29 09:26:38

标签: macros sas rownum

我正在使用SAS 9.2,我得到了以下代码:

data success error;
length vague 3 path $150;
set foplist;
call symputx('error_count', rownum);
%if &&error&error_count = 0 %then %do;
path= "&&path&error_count";
vague=1;
output success;
%end;
%else %do;
...
%end;
run;

对于每个记录,我想获得rownum,并将其与另一个宏变量结合起来。 rownum显示foplist数据集中记录的rownumber。出于某种原因,我总是得到数据集中的最后一个数字(可能是因为宏编译?)

例如: A --- rownum = 1 B --- rownum = 2

我只得到rownum = 2

知道怎么解决吗?

谢谢!

1 个答案:

答案 0 :(得分:0)

您无法在同一个datastep中创建和解析宏变量。

您是否已经定义了宏变量ERROR1-ERRORx和PATH1-PATHn,并希望根据rownum将这些值检索到datastep中?即解决&&ERROR&ERROR_COUNT

如果是这样,请使用symexist / symget ...

data success error ;
  length vague 3 path $150 ;
  set foplist ;
  if symexist(cats('ERROR',rownum)) and symexist(cats('PATH',rownum)) then do ;
    error_count = symget(cats('ERROR',rownum)) ;
    if error_count = 0 then do ;
      path = symget(cats('PATH',rownum)) ;
      vague = 1 ;
      output success ;
    end ; 
    else output error ;
  end ;
  else output error ;
run;