1

我正在尝试创建一个代码来在 SAS 基础中运行一个简单的感知器。我想在每次迭代中打印(或存储在表中)结果和目标,但是当我尝试打印 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; 

我得到错误:

语法错误,应为以下之一:C、COLNAME、F、FORMAT、L、LABEL、R、ROWNAME、]、|)。该选项或参数无法识别,将被忽略。

我还有其他表格可以打印目标吗?

非常感谢!

4

1 回答 1

1

根据PRINT 上的文档,您需要这样做:

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;
于 2014-07-11T00:04:31.873 回答