# What's New in SAS/IML 9.0 and 9.1

## Overview

New to SAS/IML are the following:

• A set of new iterative methods for large sparse systems of linear equations
• A set of new direct algorithms utilizing Cholesky factorization for large sparse systems of linear equations
• A new chapter on Genetic Algorithms
• A set of new functions and calls for grouping and sorting
• A set of new calls for random number generation
• A new programming feature that extends the matrix subscripting functionality

## Iterative Methods for Large Sparse Systems of Linear Equations

Iterative methods create a new direction in IML: the capability to handle large, sparse matrices and systems. With sparsity exploitation and iterative approximation algorithms, IML can solve linear systems containing as many as 106 variables on a regular PC. The new methods that are used are Conjugate Gradient, Minimum Residual, and Biconjugate Gradient. The collection of preconditioners include fast incomplete Cholesky factorization and Jacobi.

## Direct Algorithms for Large Sparse Systems of Linear Equations: Cholesky Factorization

The Cholesky algorithm comprises a minimum degree ordering heuristic and symbolic factorization. The implementation is based on a quotient graph model.

## Genetic Algorithms

Genetic algorithms are a family of search algorithms that seek optimal solutions to problems using an approach that parallels the principles of natural selection and evolution in nature. There are several new experimental subroutines and functions that enable you to formulate and implement genetic algorithm optimizations. You have the flexibility either to write your own modules to specify the objective function and genetic operators or to use standard functions and operators provided by IML.

## New Functions and Calls

### BY Group Processing for Matrices

A new function, UNIQUEBY, has been added to IML that makes it easier to retrieve and process BY groups in a sorted matrix. You can use the SORT and SORTNDX calls to sort a matrix, and then call the UNIQUEBY function to get a vector of indices of the first row of each unique BY group in the input matrix. See the Language Reference section for full details.

### SORT and SORTNDX Calls

Two new subroutines have been added to make sorting of matrices easier. The SORT call sorts a matrix in place, sorting the rows by specified columns. The SORTNDX function creates an index matrix, without rearranging the input matrix, which enables you to access the rows of the input matrix in sorted order. The SORTNDX call will normally be faster than the SORT call, and you can use it to create multiple indexes into the same input matrix. See the Language Reference section for full details.

### RANDSEED and RANDGEN Calls

Two new subroutines have been added to improve the efficiency of random number generation. RANDSEED and RANDGEN use the same algorithm as the data functions STREAMINIT and RAND, with changes to maximize performance in IML. See the Language Reference section for full details.

## New Programming Feature

### Subscripting by Row or Column Names

Matrix subscripting functionality has been extended, so that you can specify a set of rows or columns by the names given in a MATTRIB statement or assigned by a data set statement. This is done by using a character matrix as one or both of the subscripts. IML will attempt to match character string elements to column or row names assigned to the matrix. See the Language Reference section for full details and examples.