IML(Interactive Matrix Language)交互式矩阵语言,可以处理各种矩阵运算,拥有丰富的可以直接用于矩阵运算的算符和大量的数学函数,是用SAS系统开发的应用软件。 一、启动和退出IML
在PGM窗口键入语句:
proc iml; /*启动IML*/
reset print; /*从LOG窗口获得语句执行的有关信息*/
quit; /*退出IML ,返回SAS状态*/
二、矩阵的创建
1.直接输入法
例1
a=2;/* a=2,一行一列的矩阵*/
b={1 2 3,4 5 6};;/* b=,2行3列的矩阵*/
c={1 2,3 4 ,5 6};;/* c=,3行2列的矩阵*/
d={[3] 0 [2] 3 };/* d ={0 0 0 3 3},行向量*/
proc iml;
reset print;
a=2;
b={1 2 3,4 5 6};
c={1 2,3 4,5 6};
d={[3] 0 [2] 3};
quit;
2.利用函数创建矩阵
IML带有很多可以直接生成矩阵的函数,利用这些函数来创建矩阵不但出错率少,而且可以减少输入工作,提高效率。
(1)BLOCK函数
功能:根据给定的矩阵(必为方阵)来产生一个对角方阵 格式:BLOCK(matric1,matric2,…,matric15)
例2
proc iml;
reset print;
疑罪从无
a=block(5,6);
b=block(5,6,7);
quit;
输出为:
A 2 rows 2 cols (numeric)
5 0
0 6
B 3 rows 3 cols (numeric)
5 0 0
0 6 0
0 0 7
例3
proc iml;
reset print;
a={1 1,3 3};
b={5 5,7 7};
c=block(a,b);
quit;
A 2 rows 2 cols (numeric)
1 1
3 3
B 2 rows 2 cols (numeric)
5 5
7 7
C 4 rows 4 cols (numeric)
1 1 0 0
3 3 0 0
0 0 5 5
0 0 7 7
(2) I函数
功能:产生一个单位阵。
格式:I(dimension);“dimension”为一数字,表示方阵的阶数
例4
proc iml;
reset print;
a= I (3);
b= I (4);
c=block(a,b);
quit;
A 3 rows 3 cols (numeric)
1 0 0
0 1 0
0 0 1
B 4 rows 4 cols (numeric)
1 0 0 0
0 1 0 0丙烯腈-丁二烯-苯乙烯
0 0 1 0
0 0 0 1
C 7 rows 7 cols (numeric)
1 0 0 0 0 0 0
0 1 0 0 0 0 0
0 0 1 0 0 0 0
0 0 0 1 0 0 0
0 0 0 0 1 0 0
0 0 0 0 0 1 0
0 0 0 0 0 0 1
三、矩阵的运算
“+”:A+B矩阵加法,A,B中可以有一个为数;
“-”:-A或A-B,求负矩阵或矩阵减法;
“#”:元素乘法
1数乘a#A;
2A,B同行同列,A#B为对应元素相乘;
3A为n×m,B为n×1或1×m,为A中元素分别与B中同行(列)元素相乘;
“*”:A*B矩阵乘法;
“@”:矩阵直积(kronecker积);
“/”:矩阵除法,A/B,B为与A同行同列的矩阵或数,对应元素相除;
“**”:矩阵乘方,A**k (A为方阵,k为不小于-1的整数) 为矩阵A连乘k次,k=-1时为求A的逆矩阵。
“`”:矩阵转置,A`为A的转置矩阵;
“||”:矩阵的水平合并,A||B要求A与B同行;
“//”:矩阵的垂直合并,A//B要求A与B同列;
例5
(1) ,
求 3AB-2 A,A B`+ A`B,
程序:
proc iml;
reset print;
a={1 -1 1,1 1 -1,1 -1 1};
b={1 1 -1,2 -1 0,1 0 1};
c=3#a*b-2#a;
d=a*b`+a`*b;
e=a@b;
quit;
(2) , ,求 AB
程序:
proc iml;
reset print;
a={-3 2 1};
b={-1,2,-1};
c= a*b;
quit;
(3),求 AB
程序:
proc iml;
reset print;
a={2,-1,3};
b={1-2};
c= a*b;
quit;
(4)求及
proc iml;
reset print;
a={1 -1 2,2 1 1,1 0 2};
b=a**2;
c= a**-1;
quit;
(5).和谐农村 ,求X
proc iml;
reset print;
a={2 1 -1,2 1 0,1 -1 1};
b={1 -1 3,4 3 2};
x=b*a**-1
quit;
四、求矩阵相关值的函数
inv(A):A的逆矩阵;
eijval(A):A的特征值;
小人物大境界eijvec(A):A的特征向量;
det(A):A的行列式;
trace(A):A的迹。
例6
X=
求X的逆矩阵,行列式,迹,特征值及相应的特征向量。
程序
proc iml;
reset print;
x={1 2 3 4 5 ,2 4 7 8 9,3 7 10 15 20,
4 8 15 30 20 ,光谱范围5 9 20 20 40 };
g= inv(x);
h=det(x);
t=trace(x);
e=eigval(x);
d=eigvec(x);
quit;
五、计算随机向量的样本均值、样本协方差阵、样本相关阵及偏相关系数 1.直接编程(corr过程)
例1(教材p78例3-1.1)为了研究人体吸收和消耗氧的功能.对31位成年人进行耗氧测试,测试结果存在fitness数据集中,该数据集包含如下8个变量:
variable type len label
1 x1 num 8 年龄
2 x2 num 8 体重
3 x3 num 8 耗氧量(肺活量)
4 x4 num 8 1.5英里的跑步时间(分钟)
5 x5 num 8 休息时的心律
6 x6 num 8 跑步时的心律
7 x7 num 8 跑步时纪录的最大心律
8 group num 8 试验组
求样本均值、样本协方差阵、样本相关阵
程序:
proc corr data=ch.fitness cov; /*求样本均值、样本协方差阵、样本var x1-x7; 相关阵*/
proc corr data=ch.fitness cov nosimpl;
with x3 x4;
partial x1 x2;
var x5 x6 x7;
run;
第二个corr过程是求当变量x1(年龄)和x2(体重)固定时,x3(耗氧量)x4(跑步时间)和x5(休息时的心律)x6(跑步时的心律)x7(最大心律)之间的样本偏协方差阵和样本偏相关阵及对样本偏相关系数的检验。