我需要将数组中的每个数字(SAS数据集中的一列)提升到一定的幂。我已经被告知,在将列的内容写入矩阵之后,可以在IML中完成此操作。然而,矩阵必须显然是方形的,以便在IML中提升到幂,并且我的数据非常不方形矩阵。将一列数字提升为幂的程序和语法是什么?
很抱歉询问这些简单的事情,我可以像SAS那样陌生。
答案 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)
谢谢!我使用了元素运算符,它运行了(软件这次不反对),虽然出现了另一个问题(我将在另一个问题中提出这个问题)。