在SAS中将数字数组提升为幂

时间:2015-10-21 19:04:44

标签: arrays matrix sas exponent sas-iml

我需要将数组中的每个数字(SAS数据集中的一列)提升到一定的幂。我已经被告知,在将列的内容写入矩阵之后,可以在IML中完成此操作。然而,矩阵必须显然是方形的,以便在IML中提升到幂,并且我的数据非常方形矩阵。将一列数字提升为幂的程序和语法是什么?

很抱歉询问这些简单的事情,我可以像SAS那样陌生。

3 个答案:

答案 0 :(得分:3)

无需道歉。 SAS是一个非常不同的思维过程,需要大量的练习。你提出了所有正确的问题。

SAS是一种迭代语言。您所说的数字数组听起来像数据集中的许多单独观察。 SAS在每个数据集中一次对一行执行值操作,然后在到达数据步骤底部时移动到下一行。

假设您的数据集如下所示:

 var
 1
 2
 3
 4

如果你想对每个数字求平方,你可以创建一个新变量(或者你可以覆盖当前变量,你的选择)并使用**指数运算符。

data want;
    set have;
    var_squared = var**2;
run;

在此步骤中,SAS创建数据集want,读取数据集have,创建一个名为var_squared的长度为8的新数字变量,为其赋值{{1}然后输出。它重复每行的读取 - 计算 - 写入周期,直到它到达文件标记的末尾。请注意,var*var会自动隐含。如果您未指定output,则SAS会在点击output后自动写入新数据集。

您的新数据集将如下所示:

run

答案 1 :(得分:0)

正如您所发现的那样,SAS / IML语言提供了更多类型的乘法功能,并且提升了电源效率。操作比熟悉的标量操作。您可以阅读different ways to multiply in the SAS/IML language.

对于大多数操作,SAS / IML语言区分elementwise operations and vector or matrix operations。对于您的用例,您应该使用元素幂功率运算符(##),它将向量或矩阵的每个元素提升为幂。例如,要计算数据集中每个学生的高度的平方,可以使用:

proc iml;
use sashelp.class;
read all var {"Height"};
close sashelp.class;

sqHt = Height##2;   /* raise each element to 2nd power */
print Height sqHt;

答案 2 :(得分:0)

谢谢!我使用了元素运算符,它运行了(软件这次不反对),虽然出现了另一个问题(我将在另一个问题中提出这个问题)。