SAS里的平行世界 | 【SAS Says · 扩展篇】IML:1.入门

本节目录:

1. IML基本语句

2. 标量、向量与矩阵

(1)定义标量

(2)定义向量

(3)定义矩阵

3. 矩阵的元素运算

(1)四则运算

(2)比较运算

(3)取值运算

4. 矩阵运算

(1)矩阵相乘

(2)水平连接

(3)垂直连接

(4)转置

(5)截取运算符


【SAS Says · 扩展篇】IML:入门

你还在一边用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-12-11

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

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Python小屋

详解Python科学计算扩展库numpy中的矩阵运算(1)

首先解答上一篇文章中使用with关键字让你的Python代码更加Pythonic最后的习题,该题答案是False,原因在于内置函数sorted()的参数reve...

2894
来自专栏数据小魔方

左手用R右手Python系列10——统计描述与列联分析

数据统计描述与列联表分析是数据分析人员需要掌握的基础核心技能,R语言与Python作为优秀的数据分析工具,在数值型数据的描述,类别型变量的交叉分析方面,提供了诸...

54012
来自专栏nnngu

数据结构01 算法的时间复杂度和空间复杂度

1、算法的概念: 算法 (Algorithm),是对特定问题求解步骤的一种描述。 解决一个问题往往有不止一种方法,算法也是如此。那么解决特定问题的多个算法之间如...

3263
来自专栏深度学习之tensorflow实战篇

Python中map函数

python中的map()函数 map(function, iterable, ...) 1.对可迭代函数'iterable'中的每一个元素应用‘functi...

3584
来自专栏数据结构与算法

计算几何笔记

若向量$(x, y)$旋转角度为$a$,则旋转后的向量为$(xcosa - ysina, y cosa + xsina)$

1922
来自专栏小樱的经验随笔

容斥原理

容斥原理 对容斥原理的描述 容斥原理是一种重要的组合数学方法,可以让你求解任意大小的集合,或者计算复合事件的概率。 描述 容斥原理可以描述如下: 要计算几个...

4297
来自专栏专知

【干货】计算机视觉实战系列03——用Python做图像处理

【导读】专知成员Hui上一次为大家介绍Matplotlib的使用,包括绘图,绘制点和线,以及图像的轮廓和直方图,这一次为大家详细讲解Numpy工具包中的各种工具...

45710
来自专栏深度学习自然语言处理

如何防止softmax函数上溢出(overflow)和下溢出(underflow)

《Deep Learning》(Ian Goodfellow & Yoshua Bengio & Aaron Courville)第四章「数值计算」中,谈到了上...

39210
来自专栏Leetcode名企之路

【Leetcode】64. 最小路径和

给定一个包含非负整数的 m x n 网格,请找出一条从左上角到右下角的路径,使得路径上的数字总和为最小。

1921
来自专栏偏前端工程师的驿站

代数几何:点,线,抛物线,圆,球,弧度和角度

一, 笛卡尔坐标系                         ? 笛卡尔坐标系是数学中的坐标系,而计算机中则采用屏幕坐标系统. ? 而三维坐标系则没有一个...

2488

扫码关注云+社区

领取腾讯云代金券