subse1(3f) - [M_datapac:VECTOR_OPERATION] extract the elements of a vector
which fall into a user-specified subset (one subset variable)
SUBROUTINE SUBSE1(X,N,D,Dmin,Dmax,Y,Ny)
REAL(kind=wp) :: D(:), Dmax, Dmin, X(:), Y(:)
INTEGER :: N, Ny
This subroutine carries over into Y all observations of the precision
precision vector X for which the corresponding elements in the precision
precision vector D are inside the closed (inclusive) interval defined
by DMIN and DMAX, while not carrying over any observations of X
corresponding to elements of D outside of this interval.
the input vector X is itself unaltered; those elements of X to be
retained are copied over into the output vector Y.
thus all observations of X which correspond to elements in D which
are smaller than DMIN or larger than DMAX are not copied over into Y.
the use of subse1(3f) gives the data analyst the capability
to easily extract subsets of the data prior to data analysis on
each subset.
X The vector of (unsorted or sorted) observations.
n The integer number of observations in the vector x.
d The vector which 'defines' the various possible subsets of x.
dmin The value which defines the lower limit (inclusively) of the
particular subset of interest to be retained.
dmax The value which defines the upper limit (inclusively) of the
particular subset of interest to be retained.
y the vector containing only those elements
of x corresponding to values of the d vector
in the interval dmin to dmax (inclusive).
ny the integer number of retained observations copied into
the vector y.
Sample program:
program demo_subse1
use M_datapac, only : subse1
implicit none
! call subse1(x,y)
end program demo_subse1
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) | :: | X(:) | ||||
integer | :: | N | ||||
real(kind=wp) | :: | D(:) | ||||
real(kind=wp) | :: | Dmin | ||||
real(kind=wp) | :: | Dmax | ||||
real(kind=wp) | :: | Y(:) | ||||
integer | :: | Ny |
SUBROUTINE SUBSE1(X,N,D,Dmin,Dmax,Y,Ny) REAL(kind=wp) :: D(:) , Dmax , Dmin , hold , pointl , pointu , X(:) , Y(:) INTEGER i , k , N , ndel , Ny ! OUTPUT--THE VECTOR Y ! INTO WHICH HAVE BEEN COPIED ! ONLY THOSE VALUES OF X WHICH ! CORRESPOND TO VALUES ! IN THE D VECTOR INSIDE ! (INCLUSIVELY) THE INTERVAL OF ! INTEREST, AND ! THE INTEGER VALUE NY ! WHICH GIVES THE NUMBER OF ! OBSERVATIONS COPIED INTO Y. ! ALSO, 12 LINES OF SUMMARY INFORMATION ! WILL BE GENERATED INDICATING ! 1) WHAT THE INTERVAL OF INTEREST WAS ! IN THE D VECTOR; ! 2) HOW MANY OBSERVATIONS WERE DELETED; ! 3) WHAT THE SAMPLE SIZE OF X WAS (N); ! 4) WHAT THE SAMPLE SIZE OF Y WAS (NY); ! PRINTING--YES. ! COMMENT--THE INPUT VECTOR X IS NOT ALTERED ! BY APPLICATION OF THIS SUBROUTINE. ! THIS IS THE MAJOR DISTINCTION ! BETWEEN THIS SUBROUTINE AND, SAY, ! THE SUBSET SUBROUTINE. ! IT IS THUS SEEN THAT THIS (SUBSE1) ! SUBROUTINE IS THE PREFERABLE OF THE 2 ! (SUBSET VERSUS SUBSE1) ! FOR HANDLING THE PROBLEM OF ! SEQUENTIALLY EXTRACTING EACH POSSIBLE ! SUBSET OF X (FOR THE PURPOSE OF ! ANALYZING EACH INDIVIDUAL SUBSET). ! INASMUCH AS THE ORIGINAL X VECTOR ! REMAINS UNCHANGED, THE ANALYST ! CAN ALWAYS OPERATE ON IT WITH ! SUBSE1 IN SEQUENTIALLY EXTRACTING ! SUBSETS OF INTEREST. ! COMMENT--IN THE END, AFTER THIS SUBROUTINE HAS ! MADE WHATEVER DELETIONS ARE APPROPRIATE, ! THE OUTPUT VECTOR Y WILL BE 'PACKED'; ! THAT IS, NO 'HOLES' WILL EXIST IN THE ! VECTOR Y--ALL OF THE RETAINED ELEMENTS ! OF Y WILL BE PACKED INTO THE FIRST AVAILABLE ! LOCATIONS IN Y, WHILE THE REMAINDER ! OF THE N LOCATIONS IN Y WILL BE ZERO-FILLED. ! COMMENT--ALTHOUGH THERE ! MAY BE A CORRESPONDANCE BETWEEN THE ! ELEMENTS OF THE X AND D VECTORS ! BEFORE APPLICATION OF ! THIS SUBROUTINE, THERE WILL ! BE NO CORRESPONDANCE BETWEEN ! Y AND D (DUE TO THE PACKING OF ! THE RETAINED ELEMENTS IN Y) ! AFTER APPLICATION OF THIS SUBROUTINE. ! ORIGINAL VERSION--APRIL 1975. ! UPDATED --NOVEMBER 1975. !--------------------------------------------------------------------- ! ! CHECK THE INPUT ARGUMENTS FOR ERRORS ! IF ( N<1 ) THEN WRITE (G_IO,99001) 99001 FORMAT (' ', & &'***** FATAL ERROR--THE SECOND INPUT ARGUMENT TO THE SUBSE1 SUBROU& &TINE IS NON-POSITIVE *****') WRITE (G_IO,99002) N 99002 FORMAT (' ','***** THE VALUE OF THE ARGUMENT IS ',I0,' *****') RETURN ELSE IF ( N==1 ) THEN WRITE (G_IO,99003) 99003 FORMAT (' ', & &'***** NON-FATAL DIAGNOSTIC--THE SECOND INPUT ARGUMENT TO THE SUBS& &E1 SUBROUTINE HAS THE VALUE 1 *****') ELSE hold = X(1) DO i = 2 , N IF ( X(i)/=hold ) GOTO 50 ENDDO WRITE (G_IO,99004) hold 99004 FORMAT (' ', & &'***** NON-FATAL DIAGNOSTIC--THE FIRST INPUT ARGUMENT (A VECTOR) & &TO THE SUBSE1 SUBROUTINE HAS ALL ELEMENTS =',E15.8,' *****') ENDIF ! !-----START POINT----------------------------------------------------- ! 50 pointl = Dmin pointu = Dmax IF ( Dmin>Dmax ) pointl = Dmax IF ( Dmin>Dmax ) pointu = Dmin ! k = 0 DO i = 1 , N IF ( D(i)>=pointl .AND. D(i)<=pointu ) THEN k = k + 1 Y(k) = X(i) ENDIF ENDDO Ny = k ndel = N - Ny ! ! WRITE OUT A BRIEF SUMMARY ! WRITE (G_IO,99005) 99005 FORMAT (' ') WRITE (G_IO,99006) 99006 FORMAT (' ','OUTPUT FROM THE SUBSE1 SUBROUTINE--') WRITE (G_IO,99007) pointl , pointu 99007 FORMAT (' ',7X,'D1 LIMITS (INCLUSIVE)-- ',E15.8,' AND ', E15.8) WRITE (G_IO,99008) 99008 FORMAT (' ',7X,'ONLY THOSE OBSERVATIONS IN X') WRITE (G_IO,99009) 99009 FORMAT (' ',7X,'WILL BE CARRIED OVER INTO Y') WRITE (G_IO,99010) 99010 FORMAT (' ',7X,'FOR WHICH THE CORRESPONDING ELEMENTS OF ','D1') WRITE (G_IO,99011) 99011 FORMAT (' ',7X,'ARE SIMULTANEOUSLY WITHIN (INCLUSIVE)') WRITE (G_IO,99012) 99012 FORMAT (' ',7X,'EACH SPECIFIED LIMIT.') WRITE (G_IO,99013) 99013 FORMAT (' ',7X,'NO OBSERVATIONS OUTSIDE OF THIS INTERVAL') WRITE (G_IO,99014) 99014 FORMAT (' ',7X,'HAVE BEEN CARRIED OVER INTO Y.') WRITE (G_IO,99015) N 99015 FORMAT (' ',7X,'THE INPUT NUMBER OF OBSERVATIONS (IN X) IS ', I0) WRITE (G_IO,99016) Ny 99016 FORMAT (' ',7X,'THE OUTPUT NUMBER OF OBSERVATIONS (IN Y) IS ', I0) WRITE (G_IO,99017) ndel 99017 FORMAT (' ',7X,'THE NUMBER OF OBSERVATIONS DELETED IS ', I0) ENDIF ! END SUBROUTINE SUBSE1