call zeromatrix(mat);
do i=1 to &N-1;
mat[X[i]+2, X[i+1]+2] = mat[X[i]+2, X[i+1]+2] + 1;
end;
mat[X[&N]+2, x[1]+2] = mat[X[&N]+2, x[1]+2] + 1;
put mat=;
call fillmatrix(J,1);
call mult(mat, J, J);
do i=1 to 3;
do k=1 to 3;
prob[i,k] = mat[i,k]/J[i];
end;
end;
put prob=;
run;
[/code:21u2mewb]
[code:21u2mewb]%let circular = 1,1,0,0,0 ,0 ,1 ,1,0,1,1,1,-1,-1,0,-1,1,1,-1,-1,-1,0,1,0,0,0 ,-1,1 ,-1,-1,-1,0;
%let N = %sysfunc(countw(%superq(circular), %str(,)));
data xxx/view=xxx;
array x[0:%eval(&N-1)] _temporary_ (&circular);
do _n_=lbound(x) to hbound(x);
x1 = x[_n_];
x2 = x[mod(_n_+1, &N)];
output;
end;
proc format;
picture mypct
low-high = '09.9999'(mult=100);
proc tabulate data=xxx out=yyy;
class x1 x2;
table x1=' ', x2=' '*rowpctn=' '*f=mypct.;
run;
options validvarname=any;
proc transpose data=yyy out=zzz(drop=_name_);
by x1;
id x2;
var pct:;
run;
data zzz;
set zzz;
array x[*] _numeric_;
do _n_=1 to dim(x);
if lowcase(vname(x[_n_])) ne 'x1' then
x[_n_] = coalesce(x[_n_],0)/100;
end;
run;[/code:21u2mewb]