宏做循环没有任何输出

时间:2016-04-13 06:06:30

标签: loops macros sas

我的目的是找出是否有跟进。首先,objid需要与所有R1R14进行比较。如果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);

1 个答案:

答案 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;