Hello
I am using (proc lifereg) in my SAS IML, So I used submit and endsubmit to get out of IML and then I used (Use-Read-Close) to save my results from the previous step and save them on a vector for later use.
The problem is that I can't print my final answer. I am not sure what else do I need to do. Any help is highly highly appreciated. Thank you.
proc iml;
k=10;
seed=0;
scheme=1;
n=30;
m=20;
r=J(m, 1, 0);
r[m]=10;
sigma1=1;
sigma2=1;
pi=22/7;
ru=0.2;
* this is the correlation;
mu1=0;
mu2=0;
B0=1;
B1=0.2;
lambda=.5;
Y=J(m, 1, 0);
XX=J(m, 1, 0);
** Simulation of progressive censoring ****;
Ww=J(m, 1, 0);
X=J(m, 1, 0);
UU1=J(m, 1, 0);
U2=J(m, 1, 0);
T1=J(n, 1, 0);
V=J(n, 1, 0);
Y1=J(m, 1, 0);
Z1=J(n, 1, 0);
Z2=J(n, 1, 0);
Ee=J(m, 1, 0);
Vv=J(m, 1, 0);
ll=J(m, 1, 0);
EST1=J(n, 1, 0);
EST3=J(n, 1, 0);
Do N1=1 to K;
** Creation of the progressive data from Uniform;
************************************************;
do i=1 to m;
Ww[i]=Uniform(seed);
ll[i]=i;
sum=0;
do j=m-i+1 to m;
sum=(R[j]+sum);
end;
Ee[i]=1/(i+sum);
Vv[i]=Ww[i]**Ee[i];
end;
do i=1 to m;
prod=1;
endloop=m-i+1;
do k1=m to endloop by -1;
prod=Vv[k1]*prod;
end;
UU1[i]=1-(prod);
** the U's are the required progressively type II
right censored sample from U(0,1);
end;
U_obs=UU1||J(m, 1, 1);
** progressive censored data of size m from U(0,1) with idex=1 to indicate the event occurs;
** I need the data to have a size n, so I need to generate more data from Uniform(0,1) with size of n-m;
UU0=J(n-m, 1, 0);
do j=1 to n-m;
UU0[j]=Uniform(seed);
end;
U_Cen=UU0||J(n-m, 1, 0);
* These are the censored data with idex 0;
U=J(n, 2, 0);
U=U_obs//U_cen;
U_1=U[, 1];
* This is the first column of the matrix U which represents the data from Uniform both(observed + censored);
U_2=U[, 2];
* This is the index (1:failure OR 0:Censored);
Z1=quantile('Normal', U_1);
* this is how we generate the covariate vector which is associated with Beta1;
/*do j=1 to n;
V[j]=Uniform(seed);
end;
*Z2=quantile('Normal',V);
y1=(ru#Z1+sqrt(1-ru**2)#Z2)#sigma2+mu2; **/
C=B0+B1#Z1;
T1=exp(C)#(-log(U_1))##lambda;
/*Weibull**;*/
/* (1) To use the values of my r.v. in proc lifereg, we need to write them to a SAS data set using CREATE and APPEND
statements. These statements create data set AFT;*/
create AFT var {"U_obs", "U_Cen", "U" , "U_1" , "U_2", "T1", "Z1"};
append;
close AFT;
* (2) Next, the lifereg procedure is called from within IML by using SUBMIT and ENDSUBMIT statements. ;
submit;
proc lifereg data=AFT outest=AFT_out covout;
model T1*U_2(0)=Z1 / dist=WEIBULL;
run;
data new_AFT;
set AFT_out;
keep Z1;
run;
proc transpose data=new_AFT out=idnumber name=Test prefix=sn;
run;
endsubmit;
* (3) To read the results back to SAS/IML we write "use", "read", and "close";
Use idnumber;
read all var {Sn1 Sn2 Sn3 Sn4};
Close idnumber;
Est1[N1]=Sn1;
end;
*end of simulation loop (NN);
Est1_Hat=Est1[:];
print Est1_Hat;
Quit;