Loops 没有任何输出的宏do循环
我的目的是了解是否有后续行动。首先,objid需要与所有Loops 没有任何输出的宏do循环,loops,macros,sas,Loops,Macros,Sas,我的目的是了解是否有后续行动。首先,objid需要与所有R1到R14进行比较。如果objid等于某个RX,则检查R(X+1)中是否有后续操作。总的来说,最大R为14。如果objid=R14,则没有后续行动。例如,第一条记录中的objid是1111。它与R1相同,并且有一个后续的R2,因为R2没有丢失。第二条记录R1=R14,但没有后续记录 我已经写了一段代码,但没有输出。我不明白问题出在哪里 数据如下所示: objid R1 R2 ... R14 ----- ---- --
R1
到R14
进行比较。如果objid等于某个RX
,则检查R(X+1)
中是否有后续操作。总的来说,最大R
为14。如果objid=R14
,则没有后续行动。例如,第一条记录中的objid是1111。它与R1相同,并且有一个后续的R2
,因为R2
没有丢失。第二条记录R1=R14
,但没有后续记录
我已经写了一段代码,但没有输出。我不明白问题出在哪里
数据如下所示:
objid R1 R2 ... R14
----- ---- ---- ----
1111 1111 1112 ...
2222 1101 2201 ... 2222
...
4567 5234 4567 ...
代码:
%macro rr(n=);
data linkrr;
set linkrev_tricup;
%do i=1 %to &n;
%if %eval(r&i.=objid) %then %do;
%let j=%eval(&i.+1);
%if %eval(r&j.>0) %then %eval(index_rr=1);
%else %eval(index_rr=0);
output;
%end;
%end;
run;
%mend rr;
%rr(n=14);
您正在混合使用宏和datastep函数。宏函数只是代码生成器。他们无法评估在datastep中传递的信息。 为此,请尝试仅使用带有数组的datastep代码 e、 g
数组方法是有道理的,但当我读OP时,她希望第二条记录的索引为0,所以我将删除最后一条IF语句。我并没有真正理解问题的这一部分。在这种情况下,只需省略
如果R[dim(R)]eq objid,那么index_rr=1代码>零件。
data linkrev_tricup;
infile datalines ;
input objid R1 R2 R14;
datalines;
1111 1111 1112 .
2222 1101 2201 2222
;
data linkrr;
set linkrev_tricup;
index_rr=0;
array R [*] R1 -- R14;
do i = 1 to dim(R)-1;
if R[i] eq objid and R[i+1] gt 0 then do;
index_rr=1;
leave;
end;
end;
if R[dim(R)] eq objid then index_rr=1;
run;