Macros SAS宏解析调用symputx(获取当前行)

Macros SAS宏解析调用symputx(获取当前行),macros,sas,rownum,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

我使用的是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数据集中记录的行数。出于某种原因,我总是得到数据集中的最后一个数字(可能是因为宏编译?)

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

我只得到rownum=2

知道怎么修吗


谢谢

不能在同一数据步骤中创建和解析宏变量

您是否已经定义了宏变量ERROR1 ERRORx和PATH1 PATHn,并希望根据rownum将这些值检索到数据步骤中?i、 e.解决
和&ERROR&ERROR\u 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; 数据成功错误; 长度:3路150美元; 设置foplist; 如果symexist(cats('ERROR',rownum))和symexist(cats('PATH',rownum)),则执行; error_count=symget(cats('error',rownum)); 如果错误计数=0,则执行; path=symget(cats('path',rownum)); vague=1; 输出成功; 结束; 输出误差; 结束; 输出误差; 跑
从技术上讲,您可以在单个数据步骤中创建一个解析宏变量:call symput('VAR','1');如果symget('VAR')='1',则输入'true';但我确信克里斯并不是那个意思。他的意思是,您不能调用symput,然后在同一数据集中使用&VAR。完全正确!当您将宏代码%foo和&bar与数据步骤混合在一起时,请设想所有宏代码都首先执行,因为SAS基本上就是这样做的。只有在解析了%foo和&bar之后,SAS才会运行您的数据步骤。无论如何,%如果…%,那么。。。无法在打开的代码中作为自身使用(仅在%macro…%wrap内)。