0

私はMATLABでうまく機能する次のコードを持っており、SAS /PROCIMLで転置します。

[row col] = size(coeff);

A_temp    = zeros(row,col);
for i = 1: row/6            
    A_temp(6*(i-1)+1:6*i,:) = coeff(6*(i-1)+1:6*i,4:col);end;

Proc IMLでは、次のことを行います。

proc iml;
  use i.coeff;
  read all var {...} into coeff;
  print coeff;

row=NROW(coeff);
print row;
col=NCOL(coeff);
print col;
A_temp=J(row,col,0); *create zero matrix;
print A_temp;

Do i=1 TO row/6;
A_temp[(6*(i-1)+1):(6*i),]=coeff[(6*(i-1)+1):(6*i),(4:col)];
END;
quit;

コードはDOループで壊れます"(実行)行列は操作に準拠していません。" ...なぜですか?PROC IMLですべての列を選択したい場合(MATLABではこれは「:」になります)、SASIMLでは空白のままにします。

4

1 に答える 1

2

正しく指定する必要があります。A [rows、]は、Aのすべての列を意味し、任意の数の列だけではありません。この簡略化された例を参照してください。

proc iml;
/*  use i.coeff;
  read all var {...} into coeff;
  print coeff;
*/
coeff = J(15,10,3);
row=NROW(coeff);
print row;
col=NCOL(coeff);
print col;
A_temp=J(row,col,0); *create zero matrix;
print A_temp;

Do i=1 TO row;
* does not work; *A_temp[i,]=coeff[i,(4:col)];
A_temp[i,1:col-3]=coeff[i,(4:col)];
END;
quit;
于 2013-03-20T18:43:14.940 に答える