Sas 打印矩阵子集

Sas 打印矩阵子集,sas,sas-iml,Sas,Sas Iml,我正在尝试创建一个代码,以便在SAS base中运行一个简单的感知器。 我希望在每次迭代中打印(或存储在表中)结果和目标,但当我尝试打印y[I,]时,会出现错误: proc iml; use percept; read all var{x1 X2} into X; read all var{Y} into Y; W={0,0}; b=0; k=0; L=nrow(X); eta=.8; o=0; print w b k L eta; do step = 1 t

我正在尝试创建一个代码,以便在SAS base中运行一个简单的感知器。 我希望在每次迭代中打印(或存储在表中)结果和目标,但当我尝试打印y[I,]时,会出现错误:

proc iml; 
use percept; read all var{x1 X2} into X; 
            read all var{Y} into Y; 

W={0,0}; b=0; k=0; L=nrow(X); eta=.8; o=0;
print w b k L eta; 

do step = 1 to 6;   
mistakes=0; 
    do i=1 to L; 
    o=(X[i, ]*W + b);
         if Y[i, ]*o <= 0 then do;
            W = W + eta*(Y[i, ]-o)*X[i,]`; 
            b = b + eta*(Y[i, ]-o)*1; 
            k=k+1; mistakes=mistakes+1; 
            print o  Y[i, ] W b k mistakes; 
          end; 
    end; 
end; 
proc-iml;
使用感知器;将所有变量{x1 X2}读入X;
将所有变量{Y}读入Y;
W={0,0};b=0;k=0;L=nrow(X);埃塔=.8;o=0;
打印w b k L eta;
执行步骤=1至6;
错误=0;
i=1到L;
o=(X[i,]*W+b);
如果Y[i,]*oPer,您需要这样做:

print(Y[i,])
这是因为它们重载
[]
以指示格式、行名/列名等,这相当愚蠢(但可能是为了模仿其他语言?)。所以你只需要像这样包装
(Y[i,])

这里有一个愚蠢的例子

proc iml;
 use sashelp.class;
  read all var{name,sex} into class;
  read all var{height,weight,age} into classN;

 y = mean(classN[,2]);
 print class;
 print (class[1:2,]);
 print y (class[1:2,]);
quit;

我想我解决了它,我在每个循环中创建了一个变量t=Y[I],然后打印t而不是Y[I],您可以使用LABEL=option或COLNAME=option来帮助识别这些临时表达式:print Y[LABEL=“Mean”](class[1:2,])[COLNAME={“Name”“Sex”};