前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【SAS Says】高级篇:IML(1)

【SAS Says】高级篇:IML(1)

作者头像
数说君
发布2018-04-04 16:05:22
2.1K0
发布2018-04-04 16:05:22
举报
文章被收录于专栏:数说工作室

开篇话:

前段时间数说君征原创稿,果真得到了不少牛人的赐稿,比如本文的作者Ansta,作为数说工作室的特约撰稿人,将会承担下“【SAS Says】高级篇” 的写作。

SAS基础篇中,我们介绍了一些入门的东西。在进阶篇中,我们将介绍一些统计方面的SAS应用,包括主成分分析、判别分析、非参数检验、logistic模型等等。进阶篇要稍晚些与大家见面,我们首先邀请Ansta为大家带来高级篇,高级篇将介绍SAS的IML模块、SQL模块、宏语句以及贝叶斯(插一句,如果大家觉得好,求打赏,1元不嫌少,5元不嫌多;如果大家觉得不好,欢迎赐予评论,与作者交流、改进)。

本节目录:

1. IML基本语句

2. 标量、向量与矩阵

(1)定义标量

(2)定义向量

(3)定义矩阵

3. 矩阵的元素运算

(1)四则运算

(2)比较运算

(3)取值运算

4. 矩阵运算

(1)矩阵相乘

(2)水平连接

(3)垂直连接

(4)转置

(5)截取运算符


【SAS Says】高级篇:IML(1)

你还在一边用SAS做统计分析、一边用MATLAB做矩阵运算吗?SAS IML模块可以直接做矩阵运算啦!IML(Interactive Matrix Language),交互式矩阵语言,是SAS的矩阵模块。

我们不去比较SAS IML模块和MATLAB的运算功能,只要知道,在SAS里,IML和SAS数据集做交互将会方便很多,你也不用将数据倒来倒去!

来吧,带你进入IML的世界,它不会让你失望的!

1

基本语句

IML基本语句/数说工作室

Proc iml;

IML语句(每一句同样要以分号结尾)

quit;

IML模块的语句以proc iml开头,以quit结尾推出,中间的语句要加分号。

怎么在IML模块里定义矩阵呢?

看下面的内容

2

标量、向量与矩阵

(1)定义标量

就是在iml模块里,定义数值或者字符串,

例子

proc iml; a=100; b=.; c="Hello"; print a,b,c; quit;

(左边是语句,右边是跑出来的结果)

(2)定义向量

定义一个向量/数说工作室

a={ x1 x2 x3 … xn }

比如,生成一个数值行向量和一个字符行向量:

例子

proc iml; a={1 2 3, 4 5 6}; b={'Hello,' 'world!'}; print a,b; quit;

(3)定义矩阵

定义一个N×M矩阵/数说工作室

a = { n11 n12 … n1m, n21 n22 … n2m, …, nm1 nm2 … nmm } ;

记得行与行之间用逗号隔开。比如,想建立一个矩阵:

例子

proc iml; a={1 2 , 3 4}; print a; quit;

3

矩阵的元素运算

注意,是矩阵中的各个元素之间的运算,不是两个矩阵的运算。

(1)四则运算

两个矩阵a和b,那么运算符分别为:

  • 加: +;
  • 减: -;
  • 乘: #;
  • 除: /;
  • 乘方: ##;

对两个矩阵:

各运算结果如下:

例子

proc iml; a={1 2,3 4}; b={0 2,1 1}; c1=a+b; c2=a-b; c3=a#b; c4=a/b; print c1,c2,c3,c4; quit;

(2)比较运算

用比较运算符比较两个矩阵中的元素,如果比较成立,则返回1,否则返回0,比如:

例子

proc iml; a={1 2,3 4}; b={0 2,1 1}; c1=a>b; c2=a<=b; print c1,c2; quit;

(3)取值运算

<>:取出矩阵中对应元素较大的;

><:取出矩阵中对应元素较小的。

例子

proc iml; a={1 2,3 4}; b={0 2,1 1}; c1=a><b; c2=a<>b; print c1,c2; quit;

4

矩阵运算

(1) 矩阵相乘:*

如果

那么

例子

proc iml; a={1 2, 3 4}; b={0 2, 1 1}; c=a*b; print c; quit;

(2)水平连接:||

将两个行数相等的矩阵水平连接

例子

proc iml; a={1 2,3 4}; b={0 2,1 1}; c=a || b; print c; quit;

(3)垂直连接://

将两个列数相等的矩阵垂直连接

例子

proc iml; a={1 2,3 4}; b={0 2,1 1}; c=a // b; print c; quit;

(4)转置:`

此符号一般位于键盘的esc下方

例子

proc iml; a={1 2,3 4}; c=a`; print c; quit;

(5)截取运算符:[ ]

用于截取矩阵的一部分,格式为:a [ row, column ]。

其中,row或column留空表示截取整个行或者列。

例子

proc iml; a={1 2 3, 4 5 6, 7 8 9}; b=a [ 1, 3 ]; c=a [ 1, ]; d=a [ , 3 ]; print a,b,c,d;

quit;

在“[]”的帮助下,我们不仅可以对行或者列的数字进行加总、取均值的操作,还可以进行:

  • 相乘: #
  • 求最大值: <>
  • 求最小值: ><
  • 求最大值的索引: <:>
  • 求最小值的索引: >:<
  • 求平方和: ##

也可以进行组合操作,比如,我们想对a矩阵的每列求出最大值,然后讲着三个最大值求平均:

例子

proc iml; a={1 2 3, 4 5 6, 7 8 9}; x=a[ <>, : ]; print a,x; quit;

注意a[ <> , : ]的运算顺序一定是从左向右的:先计算每列的最大值,为{7,8,9},然后计算平均值,为8。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2015-08-28,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 数说工作室 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档