data school (type = corr) ; input _type_ $ stat calc biometry french latin _name_ $ ; cards ; N 30 30 30 30 30 . STD 1.2 1.3 1.1 .9 1.1 . CORR 1 .85 .9 .3 .3 stat CORR .85 1 .85 .3 .25 calc CORR .9 .85 1 .25 .3 biometry CORR .3 .3 .25 1 .9 french CORR .3 .25 .3 .9 1 latin ; proc print ; run ; /* Principal factor method, prior communality = max */ proc factor data = school method = principal priors = max rotate = varimax ; var stat calc biometry french latin ; run ; /* Proc IML demonstrates the principal factor method, using max r as the prior communality estimate */ proc iml ; r = {1 .85 .9 .3 .3 , .85 1 .85 .3 .25 , .9 .85 1 .25 .3 , .3 .3 .25 1 .9 , .3 .25 .3 .9 1 } ; std = {1.2, 1.3, 1.1, .9, 1.1} ; prior = {.9 .85 .9 .9 .9} ; spvar = {.1 .15 .1 .1 .1} ; s = diag(std)*r*diag(std) ; n = nrow(x) ; p = ncol(x) ; print r s; rlamb = r - diag(spvar) ; print rlamb ; call eigen(eigrl,eigvecrl,rlamb) ; cmpldvl = (sqrt(diag(eigrl[1:3,]))*eigvecrl[,1:3]`)` ; print eigrl eigvecrl ; print cmpldvl ; quit ; run ;