2015-10-14 296 views
1

我试图在SAS中开发一个do循环以创建多个生存区块。 认为这是我的数据集:在SAS中包含Pro循环宏中的Proc lifetest

DATA Flr; 
    INPUT T F AGE; 
CARDS; 
31 0 52 
29 1 52 
13 1 22 
21 0 21 
19 0 21 
9 0 54 
9 1 17 

; 
RUN; 

我的预期输出是执行下面这段代码的结果:

proc lifetest data=Flr plots=survival(nocensor cb=hw cl atrisk=0 to 60 by 5); 
    strata age(40); 
    time T*F(0); 
run; 

proc lifetest data=Flr plots=survival(nocensor cb=hw cl atrisk=0 to 60 by 5); 
    strata age(20); 
    time T*F(0); 
run; 

而不是调用proc lifetest两次的,我打算用do循环。这就是我所开发的。但它不起作用,我不知道问题出在哪里。

%macro Create(a, b); 
    %Do i=a %to b %by 10; 
     proc lifetest data=data plots=survival(nocensor cb=hw cl atrisk=0 to 60 by 5); 
      strata age(i); 
      time T*F(0); 
     run; 
    %end; 
%mend Create; 

%Create(20, 40) 

回答

2

您正在访问宏内部的变量,因此您需要向变量添加前导符号。另外我不确定hgage,这是一个错字吗?我改变它的年龄:

%macro Create(a, b); 
%Do i=&a %to &b %by 10; 
    proc lifetest data=data plots=survival(nocensor cb=hw cl atrisk=0 to 60 by 5); 
     strata age(&i); 
     time T*F(0); 
    run; 
%end; 
%mend Create; 

%Create(20, 40) 
+0

非常感谢,它现在的作品。抱歉,由于错字。我修正了这一点。 – Milad