0
我有下面的代碼,在MATLAB的偉大工程,我要在SAS/PROC IML轉:SAS PROC IML:DO循環來填充矩陣
[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中,這將是「:」),但是在SAS IML中,我只需將它留爲空白
到底你到底想幹什麼?看起來你正在試圖爲[6 rows,1:col]矩陣分配一個[6 rows,4:col]矩陣。那會如何工作 - A_temp矩陣的其他3列會發生什麼? – Joe 2013-03-20 18:26:19
我的A_temp是一個30X30的矩陣,在循環之前有零。然後我從COEFF矩陣中選擇6行和26列放入A_temp矩陣中......如果它在MATLAB中起作用,那麼IML中的這些方法有何不同?謝謝 – Plug4 2013-03-20 18:37:44
我的意思是,你要放置一個6x27(4:30是27)矩陣並將其放置在6x30矩陣(A_temp的定義子集)中。 SAS應該在那裏做什麼?很顯然,Matlab剛剛將它列入前27名,但SAS應該如何知道這是你想要的(而不是最後的27個或其他)? – Joe 2013-03-20 18:41:55