SUBROUTINE MIDM(X,N,IWRITE,XMIDM) C C PURPOSE--THIS SUBROUTINE COMPUTES THE C SAMPLE MIDMEAN = THE C SAMPLE 25% (ON EACH SIDE) TRIMMED MEAN C OF THE DATA IN THE INPUT VECTOR X. C INPUT ARGUMENTS--X = THE SINGLE PRECISION VECTOR OF C (UNSORTED OR SORTED) OBSERVATIONS. C --N = THE INTEGER NUMBER OF OBSERVATIONS C IN THE VECTOR X. C --IWRITE = AN INTEGER FLAG CODE WHICH C (IF SET TO 0) WILL SUPPRESS C THE PRINTING OF THE C SAMPLE MIDMEAN C AS IT IS COMPUTED; C OR (IF SET TO SOME INTEGER C VALUE NOT EQUAL TO 0), C LIKE, SAY, 1) WILL CAUSE C THE PRINTING OF THE C SAMPLE MIDMEAN C AT THE TIME IT IS COMPUTED. C OUTPUT ARGUMENTS--XMIDM = THE SINGLE PRECISION VALUE OF THE C COMPUTED SAMPLE MIDMEAN. C OUTPUT--THE COMPUTED SINGLE PRECISION VALUE OF THE C SAMPLE MIDMEAN. C PRINTING--NONE, UNLESS IWRITE HAS BEEN SET TO A NON-ZERO C INTEGER, OR UNLESS AN INPUT ARGUMENT ERROR C CONDITION EXISTS. C RESTRICTIONS--THE MAXIMUM ALLOWABLE VALUE OF N C FOR THIS SUBROUTINE IS 15000. C OTHER DATAPAC SUBROUTINES NEEDED--SORT. C FORTRAN LIBRARY SUBROUTINES NEEDED--NONE. C MODE OF INTERNAL OPERATIONS--SINGLE PRECISION. C LANGUAGE--ANSI FORTRAN. C REFERENCES--DAVID, ORDER STATISTICS, 1970, PAGES 129, 136. C --CROW AND SIDDIQUI, 'ROBUST ESTIMATION OF LOCATION', C JOURNAL OF THE AMERICAN STATISTICAL ASSOCIATION, C 1967, PAGES 357, 387. C --FILLIBEN, SIMPLE AND ROBUST LINEAR ESTIMATION C OF THE LOCATION PARAMETER OF A SYMMETRIC C DISTRIBUTION (UNPUBLISHED PH.D. DISSERTATION, C PRINCETON UNIVERSITY, 1969). C WRITTEN BY--JAMES J. FILLIBEN C STATISTICAL ENGINEERING LABORATORY (205.03) C NATIONAL BUREAU OF STANDARDS C WASHINGTON, D. C. 20234 C PHONE: 301-921-2315 C ORIGINAL VERSION--JUNE 1972. C UPDATED --SEPTEMBER 1975. C UPDATED --NOVEMBER 1975. C UPDATED --FEBRUARY 1976. C C--------------------------------------------------------------------- C DIMENSION X(1) DIMENSION Y(15000) COMMON /BLOCK2/ WS(15000) EQUIVALENCE (Y(1),WS(1)) DATA P1,P2,PERP1,PERP2,PERP3/0.25,0.25,25.0,25.0,50.0/ C IPR=6 IUPPER=15000 C C CHECK THE INPUT ARGUMENTS FOR ERRORS C AN=N IF(N.LT.1.OR.N.GT.IUPPER)GOTO50 IF(N.EQ.1)GOTO55 HOLD=X(1) DO60I=2,N IF(X(I).NE.HOLD)GOTO90 60 CONTINUE WRITE(IPR, 9)HOLD XMIDM=X(1) GOTO201 50 WRITE(IPR,17)IUPPER WRITE(IPR,47)N RETURN 55 WRITE(IPR,18) XMIDM=X(1) GOTO201 90 CONTINUE 9 FORMAT(1H ,109H***** NON-FATAL DIAGNOSTIC--THE FIRST INPUT ARGUME 1NT (A VECTOR) TO THE MIDM SUBROUTINE HAS ALL ELEMENTS = ,E15.8,6 1H *****) 17 FORMAT(1H , 98H***** FATAL ERROR--THE SECOND INPUT ARGUMENT TO THE 1 MIDM SUBROUTINE IS OUTSIDE THE ALLOWABLE (1,,I6,16H) INTERVAL * 1****) 18 FORMAT(1H ,100H***** NON-FATAL DIAGNOSTIC--THE SECOND INPUT ARGUME 1NT TO THE MIDM SUBROUTINE HAS THE VALUE 1 *****) 47 FORMAT(1H , 35H***** THE VALUE OF THE ARGUMENT IS ,I8 ,6H *****) C C-----START POINT----------------------------------------------------- C CALL SORT(X,N,Y) C AN=N NP1=P1*AN+0.0001 ISTART=NP1+1 NP2=P2*AN+0.0001 ISTOP=N-NP2 SUM=0.0 K=0 IF(ISTART.GT.ISTOP)GOTO150 DO100I=ISTART,ISTOP K=K+1 CCCCC SUM=SUM+X(I) SUM=SUM+Y(I) 100 CONTINUE AK=K XMIDM=SUM/AK GOTO170 150 WRITE(IPR,155) 155 FORMAT(1H ,37HINTERNAL ERROR IN MIDM SUBROUTINE--, 1 45HTHE START INDEX IS HIGHER THAN THE STOP INDEX) XMIDM=0.0 RETURN 170 CONTINUE C 201 IF(IWRITE.EQ.0)RETURN WRITE(IPR,999) WRITE(IPR,105)N,XMIDM WRITE(IPR,110)PERP1,NP1 WRITE(IPR,115)PERP2,NP2 WRITE(IPR,120)PERP3,K 105 FORMAT(1H ,26HTHE SAMPLE MIDMEAN OF THE ,I6,13H OBSERVATIONS, 1 4H IS ,E15.8) 110 FORMAT(1H ,8X,F10.4,12H PERCENT (= ,I6, 15H OBSERVATIONS) , 1 39HOF THE DATA WERE TRIMMED FROM BELOW) 115 FORMAT(1H ,8X,F10.4,12H PERCENT (= ,I6, 15H OBSERVATIONS) , 1 39HOF THE DATA WERE TRIMMED FROM ABOVE) 120 FORMAT(1H ,8X,F10.4,12H PERCENT (= ,I6, 15H OBSERVATIONS) , 1 52H OF THE DATA REMAIN IN THE MIDDLE AFTER THE TRIMMING) 999 FORMAT(1H ) C RETURN END