swuecho
2/23/2012 - 4:12 PM

## SAS IML

SAS IML

``````*****************************************************************************************/
SAS/IML software gives you access to a powerful and flexible programming language
*(Interactive Matrix Language) in a dynamic, interactive environment.
*
*The fundamental object of the language is a data matrix.
*You can use SAS/IML software interactively (at the statement level) to see results immediately,
*or you can store statements in a module and execute them later.

*The programming is dynamic because necessary activities such as memory allocation and
*dimensioning of matrices are performed automatically.
/******************************************************************************************;
******************************************************************************************;
*********************;
proc IML;
A={1 2 3,4 5 6,7 5 9}; *THE MATRIX A IS 3*3. USE COMMA TO SPECIFY THE COLUMN.
*USING SPACE TO SPERATE THE CLOUMN ELEMENT ;
PRINT A;               *PRINT OUT THE MATRIX.;
/****************************************
*TRANSPOSE  OF A MATRIX & PRINTING THIS;
****************************************/
A_TRANSPOSE=A`;
PRINT A_TRANSPOSE;
/**********************************************************
*THIS COMPUTES the eigenvalues & EIGENVECTORS of MATRIX A;
**********************************************************/

CALL EIGEN( EVALUE,EVECTOR,A);

PRINT EVALUE;     		* Prints out a vector of eigenvalues;
PRINT EVECTOR;          * Prints out a matrix whose columns are EIGENVECTORS
( NORMALIZED, unit length);
/**********************************************************
*FINDING THE INVERSE OF THE MATRIX A;
**********************************************************/

INV_A=INV(A);
PRINT INV_A;             *Prints out the INVERSE*;

C = {1 2 3,4 5 6};       PRINT C;             *makes a 2x3 matrix;

C1=C[+,];                PRINT C1;            *makes a 1x3 matrix by summing the columns;

C2=C[,+];                PRINT C2;            *makes a 2x1 matrix by summing the rows;

F = C[,2];               PRINT F;             *makes a matrix out of second column of C;

D = DIAG( C[,2] );       PRINT D;             *puts second column of c on diagonal;

CC= VECDIAG(D);          PRINT CC;            *makes a vector out of the diagonal;

DD = EXP(D);             PRINT DD;            *exponentiates each entry;

E = C || C;              PRINT E;             *puts c next to itself;

K = REPEAT(C,3,2);       PRINT K;             *creates a 3x2 matrix with matrix entry C;

G = 3+3*(C[,2:3]##3);    PRINT G;             *raises each entry of columns 2 & 3 of C
to the third power then multiples

H = C ## C;              PRINT H;             *raises each entry of C to itself;

J = C # C;               PRINT J;             *multiplies each entry of C by itself;

RUN;
quit;
/**********************************************************
* ANOTHER WAY OF READING MATRIX;
**********************************************************/
DATA TEST;
INFILE cards;
INPUT v1 v2 v3;
cards;
3  1  2
4  1  2
3  0  0
1  0  7
;
RUN;
/*******************************************************************************
*Read all data into an IML matrix X. FOR THIS USE the statements USE and READ.;
*******************************************************************************/
PROC IML;
USE TEST;
READ all var{v1 v2 v3} into X;
n=nrow(X);					*n is the number of observations, i.e. number of rows in X matrix;
one=J(N,1,1); 		    *12 x 1 vector of containing ones: UNIT VECTOR;
df=n-1;
mean=(one`*X)/n; 		*mean vector contains the means;
xm=x-one*mean; 		    *contains the mean corrected (X-1'*MEAN);
sscpm=xm`*xm;
************************************;
* SAMPLE VARIANCE-COVARIANCE MATRIX;
************************************;
s=sscpm/df;

d=diag(S);		        * CREATING A DIAGONAL MATRIX FROM THE DIAGONAL
ELEMENTS OF S;
***************************************************
*STANDARDIZED MATRIX: THAT IS, (X-1'*MEAN)/SQRT(D);
*YOU NEED THIS MATRIX FOR FINDING CORRELATION MATRIX
*************************************************** ;
xs=xm*sqrt(inv(d));
***************************************************
*CORRELATION MATRIX;
***************************************************;
r=xs`*xs/(n-1);
***************************************************
*DETERMINANT OF S: GENERALIZED VARIANCE
***************************************************;
gv=det(s);
***************************************************
*PRINTING ALL RESULTS;
***************************************************;
print mean,xm,sscpm,s,xs,r,gv;
print X;
RUN;
``````