count(3f) - [M_datapac:STATISTICS] compute the number of observations
between a minimum and a maximum value
SUBROUTINE COUNT(X,N,Xmin,Xmax,Iwrite,Xcount)
COUNT(3f) computes the number of observations between xmin and xmax
(inclusively) in the input vector x.
X description of parameter
Y description of parameter
Sample program:
program demo_count
use M_datapac, only : count
implicit none
! call count(x,y)
end program demo_count
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) | :: | Xcount |
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