Moves any rows of a matrix with the IMSL missing value code NaN (not a number) in the specified columns to the last rows of the matrix.
IIND — Index vector option. (Input)
IIND Meaning
< 0 The first −IIND columns of X are checked for NaN.
> 0 The IIND columns of X given by IND are checked for NaN.
IND — Index
vector of length IIND containing the
column numbers of X that are to be
checked for NaN. (Input if IIND is
positive)
If IIND is negative,
IND is not
referenced and can be a vector of length one.
X — NROW by NCOL matrix whose rows
are checked for NaN (not a number). (Input/Output)
On output, the
rows of X
containing NaN are the last NRMISS rows of X.
ISWP — Vector of
length NROW
specifying the rows that were exchanged (swapped). (Output)
The
number of nonzero elements in ISWP is the number of
swaps that took place. ISWP(I) = J (J greater than zero)
means that rows I and J of X were swapped, i.e.,
row I of the
input X is row
J of the output
X and row J of the input X is row I of the output X.
NROW — Number of
rows. (Input)
Default: NROW = size (X,1).
NCOL — Number of
columns. (Input)
Default: NCOL = size (X,2).
LDX — Leading
dimension of X
exactly as specified in the dimension statement of the calling
program. (Input)
Default: LDX = size (X,1).
NRMISS — Number of rows that contained NaN in the specified columns of X. (Output)
Generic: CALL MVNAN (IIND, IND, X, ISWP [,…])
Specific: The specific interface names are S_MVNAN and D_MVNAN.
Single: CALL MVNAN (NROW, NCOL, IIND, IND, X, LDX, ISWP, NRMISS)
Double: The double precision name is DMVNAN.
In this example, MVNAN is used to move rows containing NaN in columns 1 and 2 of a 5 by 3 matrix X to the last rows.
USE IMSL_LIBRARIES
IMPLICIT NONE
INTEGER LDX, NCOL, NROW, J
PARAMETER (NCOL=3, NROW=5, LDX=NROW)
!
INTEGER IIND, IND(1), ISWP(NROW), NOUT, NRMISS
REAL X(LDX,NCOL)
!
DATA (X(1,J),J=1,NCOL)/1.0, 10.0, 100.0/
DATA (X(2,J),J=1,NCOL)/2.0, 20.0, 200.0/
DATA (X(3,J),J=1,NCOL)/3.0, 30.0, 300.0/
DATA (X(4,J),J=1,NCOL)/4.0, 40.0, 400.0/
DATA (X(5,J),J=1,NCOL)/5.0, 50.0, 500.0/
!
X(2,2) = AMACH(6)
X(4,1) = AMACH(6)
IIND = -2
CALL WRRRN ('Input X', X)
CALL MVNAN (IIND, IND, X, ISWP, NRMISS=NRMISS)
CALL WRRRN ('Output X', X)
CALL WRIRN ('ISWP', ISWP)
CALL UMACH (2, NOUT)
WRITE (NOUT,*) ' '
WRITE (NOUT,*) 'NRMISS = ', NRMISS
END
Input X
1 2 3
1 1.0 10.0 100.0
2 2.0 NaN 200.0
3 3.0 30.0 300.0
4 NaN 40.0 400.0
5 5.0
50.0 500.0
Output X
1 2 3
1 1.0 10.0 100.0
2 5.0 50.0 500.0
3 3.0 30.0 300.0
4 NaN 40.0 400.0
5 2.0
NaN 200.0
ISWAP
1 0
2 5
3 0
4 0
5 0
NRMISS = 2
In this example, MVNAN is used to move rows containing NaN in column 1 and 3 of a 5 by 3 matrix X to the last rows.
USE IMSL_LIBRARIES
IMPLICIT NONE
INTEGER LDX, NCOL, NROW, J
PARAMETER (NCOL=3, NROW=5, LDX=NROW)
!
INTEGER IIND, IND(2), ISWP(NROW), NOUT, NRMISS
REAL X(LDX,NCOL)
!
DATA (X(1,J),J=1,NCOL)/1.0, 10.0, 100.0/
DATA (X(2,J),J=1,NCOL)/2.0, 20.0, 200.0/
DATA (X(3,J),J=1,NCOL)/3.0, 30.0, 300.0/
DATA (X(4,J),J=1,NCOL)/4.0, 40.0, 400.0/
DATA (X(5,J),J=1,NCOL)/5.0, 50.0, 500.0/
DATA IND/1, 3/
!
X(2,2) = AMACH(6)
X(4,1) = AMACH(6)
IIND = 2
CALL WRRRN ('Input X', X)
CALL MVNAN (IIND, IND, X, ISWP, NRMISS=NRMISS)
CALL WRRRN ('Output X', X)
CALL WRIRN ('ISWP', ISWP)
CALL UMACH (2, NOUT)
WRITE (NOUT,*) ' '
WRITE (NOUT,*) 'NRMISS = ', NRMISS
END
Input X
1 2 3
1 1.0 10.0 100.0
2 2.0 NaN 200.0
3 3.0 30.0 300.0
4 NaN 40.0 400.0
5 5.0
50.0 500.0
Output X
1 2 3
1 1.0 10.0 100.0
2 2.0 NaN 200.0
3 3.0 30.0 300.0
4 5.0 50.0 500.0
5 NaN
40.0 400.0
ISWP
1 0
2 0
3 0
4 5
5 0
NRMISS = 1
PHONE: 713.784.3131 FAX:713.781.9260 |