COUNT Subroutine

public subroutine COUNT(X, N, Xmin, Xmax, Iwrite, Xcount)

NAME

count(3f) - [M_datapac:STATISTICS] compute the number of observations
between a minimum and a maximum value

SYNOPSIS

   SUBROUTINE COUNT(X,N,Xmin,Xmax,Iwrite,Xcount)

DESCRIPTION

COUNT(3f) computes the number of observations between xmin and xmax
(inclusively) in the input vector x.

OPTIONS

 X   description of parameter
 Y   description of parameter

EXAMPLES

Sample program:

program demo_count
use M_datapac, only : count
implicit none
! call count(x,y)
end program demo_count

Results:

AUTHOR

The original DATAPAC library was written by James Filliben of the
Statistical Engineering Division, National Institute of Standards
and Technology.

MAINTAINER

John Urban, 2022.05.31

LICENSE

CC0-1.0

REFERENCES

  • snedecor and cochran, statistical methods, edition 6, 1967, pages 207-213.
  • dixon and massey, introduction to statistical analysis, edition 2, 1957, pages 81-82, 228-231.

Arguments

Type IntentOptional Attributes Name
real(kind=wp), dimension(:) :: X
integer :: N
real(kind=wp) :: Xmin
real(kind=wp) :: Xmax
integer :: Iwrite
real(kind=wp) :: Xcount

Source Code

SUBROUTINE COUNT(X,N,Xmin,Xmax,Iwrite,Xcount)
REAL(kind=wp) :: an , hold , X , Xcount , Xmax , Xmin
INTEGER i , isum , Iwrite , N
!
!     INPUT ARGUMENTS--X      = THE  VECTOR OF
!                                (UNSORTED OR SORTED) OBSERVATIONS.
!                     --N      = THE INTEGER NUMBER OF OBSERVATIONS
!                                IN THE VECTOR X.
!                     --XMIN   = THE  VALUE
!                                WHICH DEFINES THE LOWER LIMIT
!                                (INCLUSIVELY) OF THE REGION
!                                OF INTEREST.
!                     --XMAX   = THE  VALUE
!                                WHICH DEFINES THE UPPER LIMIT
!                                (INCLUSIVELY) OF THE REGION
!                                OF INTEREST.
!                     --IWRITE = AN INTEGER FLAG CODE WHICH
!                                (IF SET TO 0) WILL SUPPRESS
!                                THE PRINTING OF THE
!                                SAMPLE COUNT
!                                AS IT IS COMPUTED;
!                                OR (IF SET TO SOME INTEGER
!                                VALUE NOT EQUAL TO 0),
!                                LIKE, SAY, 1) WILL CAUSE
!                                THE PRINTING OF THE
!                                SAMPLE COUNT
!                                AT THE TIME IT IS COMPUTED.
!     OUTPUT ARGUMENTS--XCOUNT = THE  VALUE OF THE
!                                COMPUTED SAMPLE COUNT.
!     OUTPUT--THE COMPUTED  VALUE OF THE
!             SAMPLE COUNT.
!     PRINTING--NONE, UNLESS IWRITE HAS BEEN SET TO A NON-ZERO
!               INTEGER, OR UNLESS AN INPUT ARGUMENT ERROR
!               CONDITION EXISTS.
!     RESTRICTIONS--THERE IS NO RESTRICTION ON THE MAXIMUM VALUE
!                   OF N FOR THIS SUBROUTINE.
!     MODE OF INTERNAL OPERATIONS--.
!     ORIGINAL VERSION--FEBRUARY  1976.
!
!---------------------------------------------------------------------
!
      DIMENSION X(:)
!
!     CHECK THE INPUT ARGUMENTS FOR ERRORS
!
      IF ( N<1 ) THEN
         WRITE (G_IO,99001)
99001    FORMAT (' ',                                                   &
     &'***** FATAL ERROR--THE SECOND INPUT ARGUMENT TO THE COUNT  SUBROU&
     &TINE IS NON-POSITIVE *****')
         WRITE (G_IO,99002) N
99002    FORMAT (' ','***** THE VALUE OF THE ARGUMENT IS ',I0,' *****')
         RETURN
      ELSEIF ( N==1 ) THEN
         WRITE (G_IO,99003)
99003    FORMAT (' ',                                                   &
     &'***** NON-FATAL DIAGNOSTIC--THE SECOND INPUT ARGUMENT TO THE COUN&
     &T  SUBROUTINE HAS THE VALUE 1 *****')
         Xcount = 0.0_wp
         RETURN
      ELSE
         IF ( Xmin==Xmax ) THEN
            WRITE (G_IO,99004)
99004       FORMAT (' ','***** FATAL ERROR--THE THIRD AND FOURTH INPUT '&
     &              ,'ARGUMENTS TO THE COUNT  SUBROUTINE ARE IDENTICAL')
            WRITE (G_IO,99005) Xmin
99005       FORMAT (' ','***** THE VALUE OF THE ARGUMENTS ARE ',E15.7,  &
     &              ' *****')
            Xcount = 0.0_wp
            RETURN
         ELSE
            hold = X(1)
            DO i = 2 , N
               IF ( X(i)/=hold ) GOTO 50
            ENDDO
            WRITE (G_IO,99006) hold
99006       FORMAT (' ',                                                &
     &'***** NON-FATAL DIAGNOSTIC--THE FIRST  INPUT ARGUMENT (A VECTOR) &
     &TO THE COUNT  SUBROUTINE HAS ALL ELEMENTS =',E15.8,' *****')
            Xcount = 0.0_wp
            RETURN
         ENDIF
!
!-----START POINT-----------------------------------------------------
!
 50      an = N
         Xcount = 0.0_wp
         isum = 0
         DO i = 1 , N
            IF ( X(i)>=Xmin .AND. Xmax>=X(i) ) isum = isum + 1
         ENDDO
         Xcount = isum
!
         IF ( Iwrite==0 ) RETURN
         WRITE (G_IO,99007)
99007    FORMAT (' ')
         WRITE (G_IO,99008) N , Xmin , Xmax , Xcount
99008    FORMAT (' ','THE NUMBER (OUT OF THE ',I0,                      &
     &           ' OBSERVATIONS) IN THE INTERVAL ',E15.7,' TO ',E15.7,  &
     &           ' IS ',E15.7)
      ENDIF
END SUBROUTINE COUNT