PROPOR Subroutine

public subroutine PROPOR(X, N, Xmin, Xmax, Iwrite, Xprop)

NAME

propor(3f) - [M_datapac:STATISTICS] compute the sample proportion

SYNOPSIS

   SUBROUTINE PROPOR(X,N,Xmin,Xmax,Iwrite,Xprop)

DESCRIPTION

propor(3f) computes the the sample proportion which is the proportion
of data between xmin and xmax (inclusively) in the input vector x.

the sample proportion = (the number of observations in the sample
between xmin and xmax, inclusively) / n. The sample proportion will
be a REAL value between 0.0 and 1.0 (inclusively).

OPTIONS

 X   description of parameter
 Y   description of parameter

EXAMPLES

Sample program:

program demo_propor
use M_datapac, only : propor
implicit none
! call propor(x,y)
end program demo_propor

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) :: Xprop

Source Code

SUBROUTINE PROPOR(X,N,Xmin,Xmax,Iwrite,Xprop)
REAL(kind=wp) :: an , hold , sum , X , Xmax , Xmin , Xprop
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 PROPORTION
!                                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 PROPORTION
!                                AT THE TIME IT IS COMPUTED.
!     OUTPUT ARGUMENTS--XPROP  = THE  VALUE OF THE
!                                COMPUTED SAMPLE PROPORTION.
!                                THIS WILL BE A VALUE BETWEEN
!                                0.0 AND 1.0 (INCLUSIVELY).
!     OUTPUT--THE COMPUTED  VALUE OF THE
!             SAMPLE PROPORTION.
!     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--JUNE      1974.
!     UPDATED         --SEPTEMBER 1975.
!     UPDATED         --NOVEMBER  1975.
!
!---------------------------------------------------------------------
!
      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 PROPOR 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 PROP&
     &OR SUBROUTINE HAS THE VALUE 1 *****')
         Xprop = 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 PROPOR SUBROUTINE ARE IDENTICAL')
            WRITE (G_IO,99005) Xmin
99005       FORMAT (' ','***** THE VALUE OF THE ARGUMENTS ARE ',E15.7,  &
     &              ' *****')
            Xprop = 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 PROPOR SUBROUTINE HAS ALL ELEMENTS =',E15.8,' *****')
            Xprop = 0.0_wp
            RETURN
         ENDIF
!
!-----START POINT-----------------------------------------------------
!
 50      an = N
         Xprop = 0.0_wp
         isum = 0
         DO i = 1 , N
            IF ( X(i)>=Xmin .AND. Xmax>=X(i) ) isum = isum + 1
         ENDDO
         sum = isum
         Xprop = sum/an
!
         IF ( Iwrite==0 ) RETURN
         WRITE (G_IO,99007)
99007    FORMAT (' ')
         WRITE (G_IO,99008) N , Xmin , Xmax , Xprop
99008    FORMAT (' ','THE PROPORTION OF THE ',I0,                       &
     &           ' OBSERVATIONS IN THE INTERVAL ',E15.7,' TO ',E15.7,   &
     &           ' IS ',E15.7)
      ENDIF
END SUBROUTINE PROPOR