/* This is just an example of PROC IML*/ OPTIONS LS=80 PS=55; PROC IML; START LETVAL; /* DATA IS IN X, M IS THE NUMBER OF LETTER VALUES*/ M = 6; N = NROW(X); /* SORT X */ A = X; X[RANK(X),]= A ; /* SET THE TABLE OF LETTER VALUES */ LV = REPEAT(0,M,6); /* D IS THE LENGTH OF THE SUBSAMPLE FOR THE LV */ D = N; DO I=1 TO M; IF(D > 0) THEN DO; /* SORT THE RIGHT SUBSET */ B = X[1:D,]; * A = B; * B[RANK(B),]=A; /* SORT THE LEFT SUBSET */ C = X[(N-D+1):N,]; * A = C; * C[RANK(C),]=A; /* THE MEDIANS*/ DD = INT((D+1)/2); IF( D = (2*DD -1)) THEN DO; LV[I,1] = B[DD]; LV[I,3] = C[DD]; END; ELSE DO; LV[I,1] = (B[DD]+B[DD+1])/2; LV[I,3] = (C[DD]+C[DD+1])/2; END; /*CALCULATE THE MID VALUES*/ LV[I, 2] = (LV[I, 1] + LV[I, 3])/2; /*CALCULATE THE SPREAD*/ LV[I, 4] = LV[I, 3] - LV[I, 1]; LV[I, 5] = LV[I, 2] - LV[1, 1] ; LV[I, 6] = ((LV[I, 1] - LV[1, 1])**2 + (LV[I, 3] - LV[1, 1])**2)/ 4/LV[1, 1]; D = DD; END; END; FINISH; z = repeat(0,6,2); /*USER DEFINE the 3 datasets and p in here */ k1={918,130,185,37,1127,74}; k2={3051,269,81,4573,53,324}; k3={308,236,41,33,28,66}; k4={562,494,886,30,34,698}; k5={30,31,31,37,46,33}; k6={36,85,83,2277,35,39}; p=1; /* code, please do not tuch */ if (p=0) then X = log(k1); if (p < 0) then X =-k1##p; if (p > 0) then X = k1##p; run letval; /* PRINT THE TABLE */ R = {"M" "F" "E" "D" "C"} ; C = {"LOWER" "UPPER" "MID" "SPREAD" "X" "Y"}; PRINT LV[ ROWNAME=R COLNAME=C]; z[1,1] = LV[1,1]; z[1,2] = LV[2,4]; if (p = 0) then X = log(k2); if (p < 0) then do; X = -k2##p; end; if (p > 0) then do; X = k2##p; end; run letval; /* PRINT THE TABLE */ R = {"M" "F" "E" "D" "C"} ; C = {"LOWER" "UPPER" "MID" "SPREAD" "X" "Y"}; PRINT LV[ ROWNAME=R COLNAME=C]; z[2,1] = LV[1,1]; z[2,2] = LV[2,4]; if (p = 0) then X = log(k3); if (p < 0) then do; X = -k3##p; end; if (p > 0) then do; X = k3##p; end; run letval; /* PRINT THE TABLE */ R = {"M" "F" "E" "D" "C"} ; C = {"LOWER" "UPPER" "MID" "SPREAD" "X" "Y"}; PRINT LV[ ROWNAME=R COLNAME=C]; z[3,1] = LV[1,1]; z[3,2] = LV[2,4]; if (p = 0) then X = log(k4); if (p < 0) then do; X = -k4##p; end; if (p > 0) then do; X = k4##p; end; run letval; /* PRINT THE TABLE */ R = {"M" "F" "E" "D" "C"} ; C = {"LOWER" "UPPER" "MID" "SPREAD" "X" "Y"}; PRINT LV[ ROWNAME=R COLNAME=C]; z[4,1] = LV[1,1]; z[4,2] = LV[2,4]; if (p = 0) then X = log(k5); if (p < 0) then do; X = -k5##p; end; if (p > 0) then do; X = k5##p; end; run letval; /* PRINT THE TABLE */ R = {"M" "F" "E" "D" "C"} ; C = {"LOWER" "UPPER" "MID" "SPREAD" "X" "Y"}; PRINT LV[ ROWNAME=R COLNAME=C]; z[5,1] = LV[1,1]; z[5,2] = LV[2,4]; if (p = 0) then X = log(k6); if (p < 0) then do; X = -k6##p; end; if (p > 0) then do; X = k6##p; end; run letval; /* PRINT THE TABLE */ R = {"M" "F" "E" "D" "C"} ; C = {"LOWER" "UPPER" "MID" "SPREAD" "X" "Y"}; PRINT LV[ ROWNAME=R COLNAME=C]; z[6,1] = LV[1,1]; z[6,2] = LV[2,4]; if (p < 0) then z[,1] = -log(-z[,1]); if (p >= 0) then z[,1] = log(z[,1]); z[,2] = log(z[,2]); print z; call gstart; run gxyplot(z[,1] ,z[,2]); run; QUIT; data a; input x @@; group = int((_N_-1)/10)+1; x=x**.3; datalines; 4 5 23 223 2 75 6 35 2 30 257 225 554 707 2650 151 1170 616 399 384 531 16 834 232 103 821 211 233 873 1072 ; run; proc glm; model x=group; means group/tukey; run; proc boxplot data=a; plot x*group; run;