在数据分析领域,R和SAS是两种常用的编程语言。R以其对象导向的特性,使得对变量的操作变得非常高效,尤其是在向量和矩阵的计算上。例如,直接引用矩阵中的任意单元格,对于一个5x5的矩阵,若要将数字3加到(3,3)的单元格中,R可以轻松完成这一操作。而在SAS中,这种操作可能需要编写复杂的代码。SAS通常按行处理表格数据,要到达第三行,必须先处理第一行和第二行。R将每种类型的变量都视为对象,可以一步到位地访问矩阵/向量的每个角落。
像隐马尔可夫模型(LMM)这样的技术涉及大量的矩阵计算,在R中实现起来相对简单。但在处理大型数据集时,使用SAS变得不可避免。在SAS中编写宏代码处理此类问题不仅繁琐,而且效率低下。SAS交互式矩阵语言(IML)在矩阵计算中非常有用。IML的使用不仅限于LMM的编码,它有多种用途。在任何涉及复杂矩阵计算的场景中,都应探索IML编码。本文将对IML编码进行简单介绍,但由于这个话题非常广泛,本人也在探索这门语言,因此本文仅提供一个简单而甜蜜的入门。将在后续文章中更详细地讨论这个话题。
IML是一种类似于MATLAB和Gauss的矩阵语言,它使SAS能够更有效地进行矩阵计算,使用了许多内置的矩阵函数。它只能处理二维矩阵。IML编码主要有四种用途:
在SAS能够很好地完成工作的情况下,通常应避免使用IML(因为它在内存中创建数据结构需要额外的时间)。
让从一些基本的IML代码开始。以下是在IML中初始化一个简单变量的代码。上面的代码创建了一个表格,如下所示。如所见,一个单独的数字也以矩阵的形式存储。这个矩阵只有1行和1列。现在,让创建一个更全面的矩阵,并学习一些简单的矩阵函数。以下代码创建了一个3行2列的矩阵。
proc iml; var1 = {1};run;quit;
接下来,将学习如何转置矩阵。以下代码将使能够转置给定的矩阵:
proc iml; A = {1 2, 3 4}; B = t(A);run;quit;
以下是两个矩阵的简单数学运算符。以下代码将使能够将上一部分计算的两个矩阵相加:
proc iml; A = {1 2, 3 4}; B = {5 6, 7 8}; C = A + B;run;quit;
proc iml; A = {1 2, 3 4}; B = {5 6, 7 8}; C = A * B; D = A # B;run;quit;