Enhancements in SAS/IML^{®} 9.3 Software
Overview
SAS/IML 9.3 includes two new features that are related to calling other languages from within the IML
procedure:
 calling SAS procedures and DATA steps from PROC IML
 calling functions in the R statistical programming language from PROC IML
In addition, SAS/IML 9.3 provides several new functions and subroutines.
Calling SAS Procedures from PROC IML
SAS/IML 9.3 supports the SUBMIT and ENDSUBMIT statements. These statements delimit a block of statements that are sent to another language for processing.
The SUBMIT and ENDSUBMIT statements enable you to call SAS procedures and DATA steps without
leaving the IML procedure.
You can use SAS data sets to transfer data between SAS/IML matrices and SAS procedures. SAS procedures
require that data be in a SAS data set.
Calling R Functions from PROC IML
The
SUBMIT and ENDSUBMIT statements also provide an interface to the R statistical programming
language, so that you can submit R statements from within your SAS/IML program. To submit statements
to R, specify the R option in the SUBMIT statement.
You can transfer data from SAS/IML matrices and SAS data sets into R matrices and R data frames, and
vice versa. Specifically, the following subroutines are available to transfer data from a SAS format into an
R format:
Transferring from a SAS Source to an R Destination
Subroutine 
SAS Source 
R Destination 
ExportDataSetToR 
SAS data set 
R data frame 
ExportMatrixToR 
SAS/IML matrix 
R matrix 
In addition, the following subroutines are available to transfer data from an R format into a SAS format:
Transferring from an R Source to a SAS Destination
Subroutine 
R Source 
SAS Destination 
ImportDataSetFromR 
R expression 
SAS data set 
ImportMatrixFromR 
R expression 
SAS/IML matrix 
An "R expression" can be the name of a data frame, the name of a matrix, or an expression that
results in either of these data structures.
New Functions and Subroutines in SAS/IML 9.3
The following new functions and subroutines were introduced in SAS/IML 9.3:

ALLCOMB function generates all combinations of n elements taken k at a time.

ALLPERM function generates all permutations of n elements.

BIN function divides numeric values into a set of disjoint intervals called bins. The BIN function indicates
which elements are contained in each bin.
 The
CORR function computes a sample correlation matrix for data. The function supports Pearson’s
productmoment correlations, Hoeffding’s D statistics, Kendall’s taub coefficients, and Spearman’s
correlation coefficients based on the ranks of the variables. The function supports two different methods
for dealing with missing values in the data.
 The
COV function computes a sample variancecovariance matrix for data. The function supports
two different methods for dealing with missing values in the data.
 The
COUNTN function counts the number of nonmissing values in a matrix.
 The
COUNTMISS function counts the number of missing values in a matrix.
 The COUNTUNIQUE function counts the number of unique values in a matrix.
 The
CUPROD function computes the cumulative product of elements in a matrix.
 The
DIF function computes the differences between data values and one or more lagged (shifted)
values for time series data.

ELEMENT function returns a matrix that indicates which elements of one matrix are also elements of a
second matrix.
 The
FULL function converts a matrix stored in a sparse format into a matrix stored in a dense format.
See the
SPARSE function for a description of how sparse matrices are stored.
 The
LAG function computes one or more lagged (shifted) values for time series data.
 The
MEAN function computes a sample mean of data. The function can compute arithmetic means,
trimmed means, and Winsorized means.
 The
PROD function computes the product of elements in one or more matrices.
 The
QNTL call computes sample quantiles for data.

RANCOMB function returns random combinations of n elements taken k at a time.

RANGE function returns the range of values for a set of matrices.

RANPERM function returns random permutations of n elements.

SHAPECOL function reshapes and repeats values by columns.

SQRVECH function converts a symmetric matrix which is stored columnwise to a square matrix.

STD function computes a sample standard deviation for each column of a data matrix.
 The
SPARSE function converts a matrix that contains many zeros into a matrix stored in a sparse
format which is suitable for use with the ITSOLVER subroutine or the SOLVELIN subroutine.

TABULATE call subroutine counts the number of elements in each of the unique categories of the argument.
 The
VAR function computes a sample variance for each column of a data matrix.

VECH function creates a vector from the columns of the lower triangular elements of a matrix.
Changes to the IMLMLIB Library in SAS/IML 9.3
The CORR module has been removed from the IMLMLIB library. In its place is the builtin CORR function.
The MEDIAN, QUARTILE, and STANDARD modules now support missing values in the data argument.
Documentation Enhancements
The first six chapters of the
SAS/IML User’s Guide have been completely rewritten in order to provide new
users with a gentle introduction to the SAS/IML language. Two new chapters have been written:
Enhancements in SAS/IML^{®} Studio 3.4
 SAS/IML Studio provides a new program window that colorcodes SAS/IML syntax and has the option to display line numbers.
 When running on a 64bit edition of Windows, SAS/IML Studio can now interface with a 64bit edition of R.