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

开篇话:

前段时间数说君征原创稿,果真得到了不少牛人的赐稿,比如本文的作者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。

原文发布于微信公众号 - 数说工作室(shushuojun)

原文发表时间:2015-08-28

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Python小屋

Python使用爬山算法寻找序列“最大值”

爬山算法是人工智能算法的一种,特点在于局部择优,所以不一定能够得到全局最优解,尽管效率比较高。使用爬山算法寻找序列最大值的思路是:在能看得到的局部范围内寻找最大...

40760
来自专栏大数据风控

R中如何用ifelse进行数据分组

数据分组,根据数据分析对象的特征,按照一定的数值指标,把数据分析对象划分为不同的区间部分来研究,以揭示内在的联系和规律性; 在R中,我们常用ifelse函数来进...

37980
来自专栏CDA数据分析师

数据分析师不可不知的10大基础实用算法及其讲解

算法一:快速排序算法 快速排序是由东尼·霍尔所发展的一种排序算法。在平均状况下,排序 n 个项目要Ο(n log n)次比较。在最坏状况下则需要Ο(n2)次比较...

22480
来自专栏智能算法

程序员必须知道的十大基础实用算法及其讲解

出自博客园 原文地址:http://kb.cnblogs.com/page/210687/ 算法一:快速排序算法   快速排序是由东尼·霍尔所发展的一种排序算法...

39280
来自专栏技术点滴

算法设计关于递归方程T(n)=aT(n/b)+f(n)之通用解法

算法设计关于递归方程T(n)=aT(n/b)+f(n)之通用解法 在算法设计中经常需要通过递归方程估计算法的时间复杂度T(n),本文针对形如T(n)=aT(n/...

27170
来自专栏WD学习记录

牛客网 连续子数组的最大和

HZ偶尔会拿些专业问题来忽悠那些非计算机专业的同学。今天测试组开完会后,他又发话了:在古老的一维模式识别中,常常需要计算连续子向量的最大和,当向量全为正数的时候...

12020
来自专栏ml

由判断三一点是否在三角形内部而引发的思考.....

判断一个点是否在三角形里面(包括边界上),这个问题对于许多初学者来说,可谓是一头雾水,如何判断呢? 假如有四个点A(x0,y0),B(x1,y1),C(x2,y...

31380
来自专栏有趣的Python和你

Python数据分析之锁具装箱问题问题重述问题分析建模与求解

12630
来自专栏潇涧技术专栏

Problem: Delete Number Problem

这题可以使用贪心策略,每次从高位向低位数,删除高位比低位数字小的那位上的数字,直到删除了k位之后,得到的数字肯定是最大值。

9820
来自专栏华章科技

程序员必须知道的十大基础实用算法及其讲解

快速排序是由东尼·霍尔所发展的一种排序算法。在平均状况下,排序 n 个项目要Ο(nlogn) 次比较。在最坏状况下则需要Ο(n2) 次比较,但这种状况并不常见。...

10220

扫码关注云+社区

领取腾讯云代金券