/* An approach to aligned ranks analysis that will work for balanced data as discussed in the text. */ data table922 ; input a b n ; a1 = (a = 1) ; a2 = (a = 2) ; b1 = (b = 1) ; b2 = (b = 2) ; b3 = (b = 3) ; ab11 = a1*b1 ; ab12 = a1*b2 ; ab13 = a1*b3 ; ab21 = a2*b1 ; ab22 = a2*b2 ; ab23 = a2*b3 ; mergevar = 'y' ; do i = 1 to n ; input y @@ ; output ; end ; cards ; 1 1 3 1 2 3 1 2 3 4 5 6 1 3 3 7 8 9 2 1 3 10 11 12 2 2 3 13 14 15 2 3 3 20 21 22 ; proc print ; run ; * Fit a cell means model to the data ; proc reg data = table922 outest = parests ; model y = ab11 ab12 ab13 ab21 ab22 ab23 / noint ; run ; proc print data = parests ; run ; data alpars ; set parests ; a1 = mean(ab11,ab12,ab13) ; a2 = mean(ab21,ab22,ab23) ; b1 = mean(ab11,ab21) ; b2 = mean(ab12,ab22) ; b3 = mean(ab13,ab23) ; mu = mean(a1,a2) ; alpha1 = a1 -mu ; alpha2 = a2 -mu ; beta1 = b1 -mu ; beta2 = b2 -mu ; beta3 = b3 -mu ; gamma11 = ab11 -a1 -b1 +mu ; gamma12 = ab12 -a1 -b2 +mu ; gamma13 = ab13 -a1 -b3 +mu ; gamma21 = ab21 -a2 -b1 +mu ; gamma22 = ab22 -a2 -b2 +mu ; gamma23 = ab23 -a2 -b3 +mu ; mergevar = 'y' ; keep mu alpha1 alpha2 beta1 beta2 beta3 gamma11 gamma12 gamma13 gamma21 gamma22 gamma23 mergevar ; run ; data both ; merge table922 alpars ; by mergevar ; alignA = y -mu -beta1*(b = 1) -beta2*(b = 2) -beta3*(b = 3) -gamma11*(a=1)*(b=1) -gamma12*(a=1)*(b=2) -gamma13*(a=1)*(b=3) -gamma21*(a=2)*(b=1) -gamma22*(a=2)*(b=2) -gamma23*(a=2)*(b=3) ; alignB = y -mu -alpha1*(a = 1) -alpha2*(a = 2) -gamma11*(a=1)*(b=1) -gamma12*(a=1)*(b=2) -gamma13*(a=1)*(b=3) -gamma21*(a=2)*(b=1) -gamma22*(a=2)*(b=2) -gamma23*(a=2)*(b=3) ; alignAB = y -mu -alpha1*(a = 1) -alpha2*(a = 2) -beta1*(b = 1) -beta2*(b = 2) -beta3*(b = 3) ; run ; proc print data = both ; var a b y alignA alignB alignAB ; run ; proc rank data = both out = rankboth ; var alignA alignB alignAB ; ranks rkalignA rkalignB rkalignAB ; run ; proc glm data = rankboth ; class a b ; model rkalignA rkalignB rkalignAB = a b a*b ; run ;