IML中缺少元素的SAS矩阵产品

时间:2015-02-25 17:11:43

标签: sas sas-iml

在SAS IML中,如果它们包含缺失值,则无法乘以得到两个矩阵的乘积吗?

在SAS ???中没有解决这个问题的方法

2 个答案:

答案 0 :(得分:2)

根据IML Documentation on missing values,你是对的:不可能使用矩阵乘法将包含缺失值(或更多)的两个矩阵相乘(elementwise很好)。这是出于效率原因;我不确定这会带来什么,但可能会有一些IML使用的线性代数快捷方式,如果缺少值可能就行不通。

请记住,“缺失”实际上并不是后端的值;它是一个特定的负值(实际上是最低可能的负数),当SAS用它做数学时,它知道以某种方式处理它。

如果你想使用missings,你可以将它们重新编码为比数据中任何可能值大得多的负数,比如-999999,然后在乘法完成后重新编码负值(或大的负值)回来。

以下是一个例子:

proc iml;
 xvar = {1 1,2 2};
 yvar = {-99999 2,1 1};
 zvar = xvar*yvar;
 do z=1 to nrow(zvar)    ;
   if zvar[z,1] < 0 then do;
        zvar[z,1]=.;
    end;
 end;
 print zvar;
quit;

只有当你的值总是正数时才有效,并且-999999必须足够大以至于它超过任何可能的加法(因此-1不起作用,例如,因为那时你有-1 * 1 + 1 + 1 = 0)。如果您在两个矩阵中都有错误,那么您还必须将大的正值过滤掉(同样,这只有在您的数据允许的情况下才有效;许多情况会导致这种情况产生不良后果。)

答案 1 :(得分:0)

我写了一篇博文,讨论了用缺失值解释乘法的各种方法。文章"Matrix multiplication with missing values in SAS"还包含SAS / IML代码,使您能够将包含缺失值的矩阵相乘。