Matrix Functions in PROC MCMC 
The MCMC procedure provides you with a number of CALL routines for performing simple matrix operations on declared arrays. With the exception of FILLMATRIX, IDENTITY, and ZEROMATRIX, the CALL routines listed in Table 54.42 do not support matrices or arrays that contain missing values.
CALL Routine 
Description 

Performs an elementwise addition of two matrices or of a matrix and a scalar. 

Calculates the Cholesky decomposition for a particular symmetric matrix. 

Calculates the determinant of a specified matrix, which must be square. 

Performs an elementwise multiplication of two matrices. 

Replaces all of the element values of the input matrix with the specified value. You can use this routine with multidimensional numeric arrays. 

Converts the input matrix to an identity matrix. Diagonal element values of the matrix are set to 1, and the rest of the values are set to 0. 

Calculates a matrix that is the inverse of the input matrix. The input matrix must be a square, nonsingular matrix. 

Calculates the matrix product of two input matrices. 

Performs an elementwide subtraction of two matrices or of a matrix and a scalar. 

Returns the transpose of a matrix. 

Replaces all of the element values of the numeric input matrix with 0. 
The ADDMATRIX CALL routine performs an elementwise addition of two matrices or of a matrix and a scalar.
The syntax of the ADDMATRIX CALL routine is
X specifies a scalar or an input matrix with dimensions (that is, X[])
Y specifies a scalar or an input matrix with dimensions (that is, Y[])
Z specifies an output matrix with dimensions (that is, Z[])
such that
The CHOL CALL routine calculates the Cholesky decomposition for a particular symmetric matrix.
The syntax of the CHOL CALL routine is
X specifies a symmetric positivedefinite input matrix with dimensions (that is, X[m, m])
Y is a variable that contains the Cholesky decomposition and specifies an output matrix with dimensions (that is, Y[])
validate specifies an optional argument that can increase the processing speed by avoiding error checking:
If validate = 0 or is not specified, then the matrix X is checked for symmetry.
If validate = 1, then the matrix X is assumed to be symmetric.
such that
where Y is a lower triangular matrix with strictly positive diagonal entries and Y denotes the conjugate transpose of Y.
Both input and output matrices must be square and have the same dimensions. If X is symmetric positivedefinite, Y is a lower triangle matrix. If X is not symmetric positivedefinite, Y is filled with missing values.
The determinant, the product of the eigenvalues, is a single numeric value. If the determinant of a matrix is zero, then that matrix is singular (that is, it does not have an inverse). The routine performs an LU decomposition and collects the product of the diagonals.
The syntax of the DET CALL routine is
X specifies an input matrix with dimensions (that is, X[])
a specifies the returned determinate value
such that
The ELEMMULT CALL routine performs an elementwise multiplication of two matrices.
The syntax of the ELEMMULT CALL routine is
X specifies an input matrix with dimensions (that is, X[])
Y specifies an input matrix with dimensions (that is, Y[])
Z specifies an output matrix with dimensions (that is, Z[])
The FILLMATRIX CALL routine replaces all of the element values of the input matrix with the specified value. You can use the FILLMATRIX CALL routine with multidimensional numeric arrays.
The syntax of the FILLMATRIX CALL routine is
X specifies an input numeric matrix
Y specifies the numeric value that is used to fill the matrix
The IDENTITY CALL routine converts the input matrix to an identity matrix. Diagonal element values of the matrix are set to 1, and the rest of the values are set to 0.
The syntax of the IDENTITY CALL routine is
X specifies an input matrix with dimensions (that is, X[])
The INV CALL routine calculates a matrix that is the inverse of the input matrix. The input matrix must be a square, nonsingular matrix.
The syntax of the INV CALL routine is
X specifies an input matrix with dimensions (that is, X[])
Y specifies an output matrix with dimensions (that is, Y[])
The MULT CALL routine calculates the matrix product of two input matrices.
The syntax of the MULT CALL routine is
X specifies an input matrix with dimensions (that is, X[])
Y specifies an input matrix with dimensions (that is, Y[])
Z specifies an output matrix with dimensions (that is, Z[])
The number of columns for the first input matrix must be the same as the number of rows for the second matrix. The calculated matrix is the last argument.
The SUBTRACTMATRIX CALL routine performs an elementwide subtraction of two matrices or of a matrix and a scalar.
The syntax of the SUBTRACTMATRIX CALL routine is
X specifies a scalar or an input matrix with dimensions (that is, X[])
Y specifies a scalar or an input matrix with dimensions (that is, Y[])
Z specifies an output matrix with dimensions (that is, Z[])
such that
The TRANSPOSE CALL routine returns the transpose of a matrix.
The syntax of the TRANSPOSE CALL routine is
X specifies an input matrix with dimensions (that is, X[])
Y specifies an output matrix with dimensions (that is, Y[])
The ZEROMATRIX CALL routine replaces all of the element values of the numeric input matrix with 0. You can use the ZEROMATRIX CALL routine with multidimensional numeric arrays.
The syntax of the ZEROMATRIX CALL routine is
X specifies a numeric input matrix.