propor(3f) - [M_datapac:STATISTICS] compute the sample proportion
SUBROUTINE PROPOR(X,N,Xmin,Xmax,Iwrite,Xprop)
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).
X description of parameter
Y description of parameter
Sample program:
program demo_propor
use M_datapac, only : propor
implicit none
! call propor(x,y)
end program demo_propor
Results:
The original DATAPAC library was written by James Filliben of the Statistical
Engineering Division, National Institute of Standards and Technology.
John Urban, 2022.05.31
CC0-1.0
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
real(kind=wp), | dimension(:) | :: | X | |||
integer | :: | N | ||||
real(kind=wp) | :: | Xmin | ||||
real(kind=wp) | :: | Xmax | ||||
integer | :: | Iwrite | ||||
real(kind=wp) | :: | Xprop |
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