Rick,
I find a better function to get rank of a matrix. It can get exact n=16 rank of Hilbert Matrix .

proc iml;
n=20;
start Hilbert(n);
i = repeat(T(1:n), 1, n); /* = row(H) */
j = repeat(1:n, n); /* = col(H) */
return( 1 / (i + j - 1) );
finish;
H = Hilbert(n);
x=ECHELON(H);
print x;