我的目的是找出是否有跟进。首先,objid需要与所有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);
答案 0 :(得分:0)
您正在混合宏和datastep函数。宏函数只是代码生成器。他们无法评估在datastep中传递的信息。 尝试仅使用带有数组的datastep代码 e.g。
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;