Macros SAS宏解析调用symputx(获取当前行)
我使用的是SAS 9.2,我得到了以下代码: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
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内)。