data map; r1=5; drop r r1 theta gamma; do theta = 1.2 to 1.8 by .02; do gamma = -.2 to .2 by .01; r = r1 -1.1 + ranuni(12345); X = r*sin(theta); Y = r*cos(theta); z = sqrt(R*R-x*x-y*y); output; end;end; do theta = 0.2 to 0.8 by .02; do gamma = .8 to 1.2 by .01; r = r1 -1.1 + ranuni(12345); X = r*sin(theta); Y = r*cos(theta); z=r*sin(gamma); output; end;end; do theta = 2.2 to 2.8 by .02; do gamma = 2 to 2.5 by .01; r = r1 -1.1 + ranuni(12345); X = r*sin(theta); Y = r*cos(theta); z=r*sin(gamma); output; end;end; data map; set map; if z=. then z=ranuni(123); proc g3d; scatter x*y=z/noneedle shape = "balloon" size=.5; proc princomp data=map out=prin; var x y z; data prin; set prin end=eof; id=1; color="green"; output; if eof then do prin1 = -3 to 3 by 1.2; do prin2=-2 to 2; id=2; prin3=0; color="red"; output; end;end; proc gplot data=prin; plot prin1*prin2=id; symbol1 v=dot i=none h=.5 c=green; symbol2 v=dot h=1 i=none c=red; proc g3d; scatter prin1*prin2=prin3/noneedle shape = "balloon" size=.5 color=color; run;