delete(3f) - [M_datapac:VECTOR_OPERATION] delete all elements of a vector
within some specified interval
SUBROUTINE DELETE(X,N,Xmin,Xmax,Newn)
delete(3f) deletes all observations in the REAL vector
x which are inside the closed (inclusive) interval defined by xmin
and xmax, while retaining all observations outside of this interval.
thus all observations in x which are larger than or equal to xmin
and smaller than or equal to xmax are deleted from x.
delete(3f) (and the replac and retain subroutines) gives the data
analyst the ability to easily 'clean up' a data set which has missing
and/or outlying observations so that a more appropriate subsequent
data analysis may be performed.
X description of parameter
Y description of parameter
Sample program:
program demo_delete
use M_datapac, only : delete
implicit none
! call delete(x,y)
end program demo_delete
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 | :: | Newn |
SUBROUTINE DELETE(X,N,Xmin,Xmax,Newn) REAL(kind=wp) :: hold , pointl , pointu , X , Xmax , Xmin INTEGER :: i , k , N , ndel , Newn , newnp1 , nold ! ! 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 PARTICULAR ! INTERVAL OF INTEREST TO BE DELETED. ! --XMAX = THE VALUE ! WHICH DEFINES THE UPPER LIMIT ! (INCLUSIVELY) OF THE PARTICULAR ! INTERVAL OF INTEREST TO BE DELETED. ! OUTPUT ARGUMENTS--NEWN = THE INTEGER NUMBER OF OBSERVATIONS ! REMAINING IN X AFTER ALL ! OF THE OBSERVATIONS INSIDE ! (INCLUSIVELY) THE INTERVAL ! OF INTEREST HAVE BEEN DELETED. ! OUTPUT--THE VECTOR X ! IN WHICH ALL THOSE VALUES INSIDE ! (INCLUSIVELY) THE INTERVAL OF INTEREST ! HAVE BEEN DELETED, AND ! THE INTEGER VALUE NEWN ! WHICH GIVES THE NUMBER OF ! OBSERVATIONS REMAINING IN X. ! ALSO, 6 LINES OF SUMMARY INFORMATION ! WILL BE GENERATED INDICATING ! 1) WHAT THE INTERVAL OF INTEREST WAS; ! 2) HOW MANY OBSERVATIONS WERE DELETED; ! 3) WHAT THE OLD (ORIGINAL) SAMPLE SIZE WAS (N); ! 4) WHAT THE NEW SAMPLE SIZE IS (NEWN). ! PRINTING--YES. ! RESTRICTIONS--THERE IS NO RESTRICTION ON THE MAXIMUM VALUE ! OF N FOR THIS SUBROUTINE. ! MODE OF INTERNAL OPERATIONS--. ! COMMENT--IN THE END, AFTER THIS SUBROUTINE HAS ! MADE WHATEVER DELETIONS ARE APPROPRIATE, ! THE OUTPUT VECTOR X WILL BE 'PACKED'; ! THAT IS, NO 'HOLES' WILL EXIST IN THE ! VECTOR X--ALL OF THE RETAINED ELEMENTS ! OF X WILL BE PACKED INTO THE FIRST AVAILABLE ! LOCATIONS IN X, WHILE THE REMAINDER ! OF THE N LOCATIONS IN X WILL BE ZERO-FILLED. ! COMMENT--IN THE MAIN (CALLING) ROUTINE, IT IS ! PERMISSABLE (IF THE ANALYST SO DESIRES) ! TO USE THE SAME VARIABLE NAME ! IN THE FIFTH ARGUMENT AS USED IN THE SECOND ! ARGUMENT IN THE CALLING SEQUENCE TO THIS ! DELETE SUBROUTINE--NO CONFLICT WILL RESULT ! IN THE INTERNAL OPERATION OF THE DELETE ! SUBROUTINE. FOR EXAMPLE, IT IS PERMISSIBLE ! TO HAVE CALL DELETE(X,N,-10.0,10.0,N) ! IN WHICH THE VARIABLE NAME N IS USED ! AS BOTH THE SECOND AND FIFTH ARGUMENTS. ! COMMENT--THIS IS ONE OF THE FEW SUBROUTINES IN DATAPAC ! IN WHICH THE INPUT VECTOR X IS ALTERED. ! ORIGINAL VERSION--JULY 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 DELETE 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 DELE& &TE 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 DELETE SUBROUTINE HAS ALL ELEMENTS =',E15.8,' *****') ENDIF ! !-----START POINT----------------------------------------------------- ! 50 pointl = Xmin pointu = Xmax IF ( Xmin>Xmax ) pointl = Xmax IF ( Xmin>Xmax ) pointu = Xmin ! nold = N k = 0 DO i = 1 , nold IF ( pointl>X(i) .OR. X(i)>pointu ) THEN k = k + 1 X(k) = X(i) ENDIF ENDDO Newn = k ndel = nold - Newn ! newnp1 = Newn + 1 IF ( newnp1<=nold ) THEN DO i = newnp1 , nold X(i) = 0.0_wp ENDDO ENDIF ! ! WRITE OUT A BRIEF SUMMARY ! WRITE (G_IO,99005) 99005 FORMAT (' ') WRITE (G_IO,99006) 99006 FORMAT (' ','OUTPUT FROM THE DELETE SUBROUTINE--') WRITE (G_IO,99007) pointl , pointu 99007 FORMAT (' ',7X,'ALL OBSERVATIONS BETWEEN ',E15.8,' AND ',E15.8) WRITE (G_IO,99008) 99008 FORMAT (' ',7X,'(INCLUSIVE) HAVE BEEN DELETED.') WRITE (G_IO,99009) 99009 FORMAT (' ',7X,'ALL OBSERVATIONS OUTSIDE OF THIS INTERVAL') WRITE (G_IO,99010) 99010 FORMAT (' ',7X,'HAVE BEEN RETAINED.') WRITE (G_IO,99011) nold 99011 FORMAT (' ',7X,'THE INPUT NUMBER OF OBSERVATIONS (IN X) IS ', & & I0) WRITE (G_IO,99012) Newn 99012 FORMAT (' ',7X,'THE OUTPUT NUMBER OF OBSERVATIONS (IN X) IS ', & & I0) WRITE (G_IO,99013) ndel 99013 FORMAT (' ',7X,'THE NUMBER OF OBSERVATIONS DELETED IS ', & & I0) ENDIF ! END SUBROUTINE DELETE