—恰似人间惊鸿客,墨染星辰云水间。
01
proc iml是SAS中的一个矩阵语言,它可以简化矩阵运算和自定义统计算法。proc iml的语法和DATA步骤有很多相似之处,但是proc iml的基本单位是矩阵,而不是观测值。proc iml可以在内存中高效地执行向量化的计算。
那么,什么是向量化的计算呢?简单来说,就是用一条语句来操作一个矩阵或者向量,而不是用循环来操作每一个元素。这样做的好处是,可以减少语句的数量,提高代码的可读性,以及利用底层的C语言来加速计算。
proc iml的函数有很多种类,包括数学函数、统计函数、矩阵函数、数据处理函数、随机数函数等。函数的参数根据不同的函数而有所不同,一般都是矩阵或标量。例如,sum函数可以计算一个矩阵或向量的和,它的参数是一个矩阵或向量;mean函数可以计算一个矩阵或向量的均值,它的参数也是一个矩阵或向量;inv函数可以计算一个方阵的逆,它的参数是一个方阵。
下面是一些proc iml的例子:
计算一个3x3矩阵A的逆,并将结果赋值给B:
proc iml;
A = {1 2 3,
4 5 6,
7 8 9};
B = inv(A); /* B is the inverse of A */
quit;
计算一个10x10随机矩阵X的特征值和特征向量,并将结果赋值给L和V:
proc iml;
call randseed(123); /* set random seed */
X = j(10,10); /* create a 10x10 matrix */
call randgen(X,"Normal"); /* fill X with normal random numbers */
L = eigval(X); /* L is a vector of eigenvalues */
V = eigvec(X); /* V is a matrix of eigenvectors */
quit;
计算一个向量y的平均值和标准差,并将结果赋值给m和s:
proc iml;
y = {1, 2, 3, 4, 5}; /* create a vector */
m = mean(y); /* m is the mean of y */
s = std(y); /* s is the standard deviation of y */
quit;
计算一个正数向量x的几何平均数、几何标准差和几何变异系数(https://blogs.sas.com/content/iml/2019/10/02/geometric-mean-deviation-cv-sas.html):
proc iml; use Have; read all var "x"; close; /* read in positive data */ GM = geomean(x); /* built-in GEOMEAN function */ print GM;
/* To estimate the geometric mean and geometric StdDev, compute arithmetic estimates of log(X), then EXP transform the results. /
n = nrow(x);
z = log(x); / log-transformed data /
m = mean(z); / arithmetic mean of log(X) /
s = std(z); / arithmetic std dev of log(X) /
GM2 = exp(m); / same answer as GEOMEAN function /
GSD = exp(s); / geometric std dev /
GCV = sqrt(exp(s**2) - 1); / geometric CV */
print GM2 GSD GCV;
quit;
Output: GM 5.476
GM2 GSD GCV 5.476 1.648 0.301
你可以看到,用两种方法计算的几何平均数是一样的,而且我们还得到了几何标准差和几何变异系数。这个例子展示了proc iml的灵活性和强大性,你可以用它来实现一些其他SAS过程没有提供的统计方法。你可以用proc iml做很多事情,比如:
实现自定义的统计方法,如回归分析、聚类分析、主成分分析等。调用其他SAS过程,如PROC REG、PROC CLUSTER、PROC PRINCOMP等,并将它们的结果传递给proc iml。
编写用户自定义的函数,并将它们保存在模块中。
使用SAS/IML Studio进行交互式数据分析和可视化。
proc iml和matlab都是矩阵语言,它们都可以用来进行矩阵运算和自定义统计算法。它们的语法也有一些相似之处,比如都用方括号来创建矩阵,都用分号来结束语句,都用星号来表示矩阵乘法等¹。不过,proc iml和matlab也有一些不同点,比如:
proc iml是SAS中的一个过程,它可以和其他SAS过程、DATA步骤和宏语言相互调用,而matlab是一个独立的软件平台,它需要通过接口或者文件传输来和SAS交互¹。
proc iml的基本数据类型是矩阵,而matlab的基本数据类型是数组。矩阵只能有两个维度,而数组可以有多个维度。因此,matlab可以处理更高维的数据结构,比如张量²。
proc iml的索引从1开始,而matlab的索引从0开始。这意味着在proc iml中,第一个元素的位置是1,而在matlab中,第一个元素的位置是0³。
proc iml支持SAS日期、时间和日期时间值,而matlab不支持这些值。在proc iml中,你可以用SAS函数来处理日期和时间相关的计算,比如intck、intnx、datepart等。
proc iml提供了一些特殊的函数和语句来实现统计模拟,比如call randgen、call randseed、do-over等。matlab也可以进行统计模拟,但是需要用循环或者其他函数来实现。
总之,proc iml和matlab都是强大的矩阵语言,它们各有优势和局限。你可以根据你的需求和喜好来选择使用哪一个。
参考链接:
¹: https://support.sas.com/resources/papers/proceedings13/144-2013.pdf
²: https://www.mathworks.com/help/matlab/math/multidimensional-arrays.html
³: https://www.mathworks.com/help/matlab/math/array-indexing.html : https://blogs.sas.com/content/iml/2018/01/15/sas-date-values-sas-iml.html : https://blogs.sas.com/content/iml/2019/10/28/simulate-data-in-sas.html : https://www.mathworks.com/help/stats/simulation-and-monte-carlo-methods.html
尊敬的读者,首先感谢您对本篇文章的关注和阅读。在此,本小编想要说明的是,以上所述内容都是经过笔者认真整理和撰写的,但限于个人能力和知识水平等因素,难免存在疏漏或错误之处。如有不当之处,敬请包涵并指正,本小编将虚心接受您的批评与建议,并严谨修正文章。再次感谢您对本篇文章的支持与厚爱。
以上就是今天的内容了,喜欢的话麻烦点个关注,非常感谢!!!