```    Program g03acfe

!     G03ACF Example Program Text

!     Mark 27.0 Release. NAG Copyright 2019.

!     .. Use Statements ..
Use nag_library, Only: g03acf, nag_wp, x04caf
!     .. Implicit None Statement ..
Implicit None
!     .. Parameters ..
Integer, Parameter               :: nin = 5, nout = 6
!     .. Local Scalars ..
Real (Kind=nag_wp)               :: tol
Integer                          :: i, ifail, irankx, iwk, ldcvm, ldcvx, &
lde, ldx, lwt, m, n, ncv, ng, nx
Character (1)                    :: weight
!     .. Local Arrays ..
Real (Kind=nag_wp), Allocatable  :: cvm(:,:), cvx(:,:), e(:,:), wk(:),   &
wt(:), x(:,:)
Integer, Allocatable             :: ing(:), isx(:), nig(:)
!     .. Intrinsic Procedures ..
Intrinsic                        :: max, min
!     .. Executable Statements ..
Write (nout,*) 'G03ACF Example Program Results'
Write (nout,*)

!     Skip heading in data file

!     Read in the problem size
Read (nin,*) n, m, nx, ng, weight

Select Case (weight)
Case ('W','w','V','v')
lwt = n
Case Default
lwt = 0
End Select
ldx = n
ldcvm = ng
lde = min(nx,ng-1)
ldcvx = nx
If (nx>=ng-1) Then
iwk = n*nx + max(5*(nx-1)+(nx+1)*nx,n) + 1
Else
iwk = n*nx + max(5*(nx-1)+(ng-1)*nx,n) + 1
End If
Allocate (x(ldx,m),isx(m),ing(n),wt(lwt),nig(ng),cvm(ldcvm,nx),e(lde,6), &
cvx(ldcvx,nx),wk(iwk))

If (lwt>0) Then
Else
End If

!     Read in variable inclusion flags

!     Use default tolerance
tol = 0.0E0_nag_wp

!     Perform canonical variate analysis
ifail = 0
Call g03acf(weight,n,m,x,ldx,isx,nx,ing,ng,wt,nig,cvm,ldcvm,e,lde,ncv,   &
cvx,ldcvx,tol,irankx,wk,iwk,ifail)

!     Display results
Write (nout,99999) 'Rank of X = ', irankx
Write (nout,*)
Write (nout,*)                                                           &
'Canonical    Eigenvalues Percentage     CHISQ      DF     SIG'
Write (nout,*) 'Correlations              Variation'
Write (nout,99998)(e(i,1:6),i=1,ncv)
Write (nout,*)
Flush (nout)
ifail = 0
Call x04caf('General',' ',nx,ncv,cvx,ldcvx,                              &
'Canonical Coefficients for X',ifail)
Write (nout,*)
Flush (nout)
ifail = 0
Call x04caf('General',' ',ng,ncv,cvm,ldcvm,'Canonical variate means',    &
ifail)

99999 Format (1X,A,I0)
99998 Format (1X,2F12.4,F11.4,F10.4,F8.1,F8.4)
End Program g03acfe
```