proc format;
invalue animal '+'=1 '-'=0;            
DATA GEL;
input  id $ 1-2  popul $ 3-4 
       @5 (band1-band10) (animal.);      
if mean(of band1-band10)= . then delete; 
cards;
A Y +++++++++-
B Y +++++++++-
C X ----++---+
D Y ++-+++--+-
E X ++--++---+
F Y +++++++++-
G Y ++-+++--+-
H Y +++++++++-
I Y ++++++-++-
J X ----++---+
K Y +++++++++-
L X --+++----+
;
run;
proc sort data=gel out=gel; by popul id;  
proc print data=gel noobs;
                                
proc summary;                   
class popul;
var band1;
output out=nn n=nn;

DATA GEL;                      
SET GEL;                       
*if xxx then delete;
DROP POPUL ID;
PROC IML;
USE GEL;
READ ALL INTO A;
use nn;
read all into nn;
na=nn[2,3];
nb=nn[3,3];
nab=na+nb;
print nn na nb;
   C=(A*A`);                   
   PRINT C[format=2.0];
   N = NCOL(C);
   D = diag(C);
   O = C-D;
   rowi=J(1, N, 1);
   SUMC= rowi * O * rowi`;
   SUMD= rowi * D * rowi`;
     BS=J(N,N,0);
     do i= 1 to N  by 1;
        do j= (i+1) to N  by 1;
          BS[i,j] =(2*C[i,j])/ (C[i, i] + C[j, j]);
        end;
    end;
   BS_SUM   = (SUMC / (SUMD*(N-1)));       
   BS_Lynch = 2*(rowi * BS * rowi`) /(N*(N-1));
   PRINT BS[format=5.3];   
   PRINT BS_SUM BS_Lynch;   
   
                            
   rowa=J(1,na,1)||J(1,nb,0);
   rowb=J(1,na,0)||J(1,nb,1);                 
   BSx= 2*(rowa * BS * rowa`) /(na*(na-1));   
   BSy= 2*(rowb * BS * rowb`) /(nb*(nb-1));  
   BSxy=  (rowa * BS * rowb`) /(na*nb);        
   B_Lynch= 1 + BSxy - 0.5*(BSx+ BSy);         
   Dxy = -log (BSxy /SQRT (BSx * BSy) );       
   print BSx BSy BSxy na nb B_Lynch Dxy;
   D = (A`*A);                  
   PRINT D[format=2.0];         
   M = NCOL(D);                 
   B = J(M, N, 1);
   B = (B - A`);
   E = (B*B`);                  
   F = (A`*B`);
   E=E+J(M, M, 1);             
                                
                                
   
   R = J(M, M, 0);             
     do i= 1 to M  by 1;
        do j= 1 to M  by 1;
         B=(D[i, j]*E[i, j] - F[i, j]*F[j, i]);
         K=SQRT( (D[i, j]+F[i,j])*(F[j,i]+E[i,j])
               *(D[i, j]+F[j,i])*(F[i,j]+E[i,j]));
                  if K<>0 then  R[i,j] = B/K;
              if((SQRT( (1.0 - R[i,j]*R[i,j])/(N-2))) <> 0) 
                then T=R[i,j]/(SQRT( (1.0 - R[i,j]*R[i,j])/(N-2)));
           if(R[i,j]=1.0)                 then T=999;
 *        if(PROBT(abs(T), N-2) < 0.975) then R[i,j]=0.000; 
        end;                             
      end;
  PRINT R[format=5.3];
  PRINT D[format=4.0] E[format=4.0] F[format=4.0];
  R= J(M, M, 1) - abs(R);       
                                0=>1, 0.1=>0.9, -0.9=>0.1, 1=>0 
  create corr from R;           
  append from R;
  H=A`;                         
  create BAND from H;          
  append from H;
PROC CLUSTER DATA=corr(type=distance) METHOD=SINGLE;
PROC TREE HORIZONTAL SPACES=2; 
PROC CLUSTER DATA=BAND METHOD=AVERAGE;
PROC TREE HORIZONTAL SPACES=2;
RUN;