IML中缺少元素的SAS矩阵积

IML中缺少元素的SAS矩阵积,sas,sas-iml,Sas,Sas Iml,在SAS IML中,如果两个矩阵包含缺失值,则不可能通过乘法得到它们的乘积,这对吗 SAS中没有解决此问题的方法???根据,您是正确的:不可能使用矩阵乘法(elementwise可以)对包含缺失值(或更多)的两个矩阵进行乘法。这是出于效率的考虑;我不确定这意味着什么,但IML可能会使用一些线性代数快捷方式,如果可能缺少值,这些快捷方式将无法正常工作 请记住,“missing”实际上不是后端中的值;它是一个特定的负值(事实上是最小可能的负数),SAS在计算时知道以某种方式处理它 如果要使用缺失,可

在SAS IML中,如果两个矩阵包含缺失值,则不可能通过乘法得到它们的乘积,这对吗

SAS中没有解决此问题的方法???

根据,您是正确的:不可能使用矩阵乘法(elementwise可以)对包含缺失值(或更多)的两个矩阵进行乘法。这是出于效率的考虑;我不确定这意味着什么,但IML可能会使用一些线性代数快捷方式,如果可能缺少值,这些快捷方式将无法正常工作

请记住,“missing”实际上不是后端中的值;它是一个特定的负值(事实上是最小可能的负数),SAS在计算时知道以某种方式处理它

如果要使用缺失,可以将其重新编码为比数据中任何可能值都大得多的非常低的负数,如-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;
proc-iml;
xvar={1,2};
yvar={-99992,11};
zvar=xvar*yvar;
do z=1至nrow(zvar);
如果zvar[z,1]<0,则do;
zvar[z,1]=。;
结束;
结束;
打印零电压;
退出

只有当值始终为正值,并且-9999999必须足够大,以使其超过使用它所做的任何可能的加法(因此-1不起作用,例如,当您使用-1*1+1+1=0时)。如果两个矩阵中都有缺失,则还必须过滤掉较大的正值(同样,这只有在数据允许的情况下才有效;许多情况下会导致产生不希望的结果。)

我写了一篇博客文章,讨论了解释缺失值乘法的各种方法。这篇文章还包括SAS/IML代码,使您能够对包含缺失值的矩阵进行乘法。

当您说“缺失值”时,您的意思是“矩阵中缺少一个值”?你能举一个例子说明这对示例矩阵数据不起作用吗?不,我有不止一个mssing值当然有一个解决方案,但你需要定义与missing相乘和相加的结果。例如,PROC SCORE可以评估矩阵乘积X*B,但对于左矩阵(数据)中的缺失值与右矩阵(模型系数)中的缺失值具有不同的规则。什么是应用程序?您是要传播缺失值还是忽略它们(视为零)?谢谢,这也只适用于定量数据。。。不是用定性的方法,你怎么会把定性数据的矩阵相乘(我想你指的是字符串?)或者你指的是别的什么。这应该适用于任何数字表示的数据,这些数据不包含很多大的负数(当然,
,但在您的方案中有两个“缺失值”相乘将产生一个较大的正值,而该正值不会被标记为缺失值。此外,正如您所指出的,当数据为非正值时,此方案会崩溃。@Rick这不是一个特别好的选择,但如果您正试图解决此问题,并且对此细节感到满意,则它可能会起作用。(如果两个数据集中都有缺失,则需要删除<-9999和>9999或类似的数据;当然,有很多方法不起作用)。哇。我不知道缺失实际上是一个“保留”数字。