Rick,
I think the following code is more readable.

proc iml;
cName = {"black" "dark" "fair" "medium" "red"};
rName = {"blue" "brown" "green"};
C = { 6 51 69 68 28,
16 94 90 94 47,
0 37 69 55 38};
colMarg = C[+, ]/c[+]; /* margin probability of each column */
rowMarg = C[ ,+]/c[+]; /* margin probability of each row */
expect=(rowMarg*colMarg)#c[+];

print expect[r=rName c=cName];
quit;