0
我正在嘗試創建一個計算向量和矩陣的內部(點)積的宏。計算沒有IML的內部產品
Y*X*t(Y) ## equivalent to the Sum(yi*Xij*yj)
我沒有IML,所以我嘗試使用數組操作。
如何創建從數據多維數組,以避免在單個陣列中的索引 翻譯。
如何調試我的循環,或者至少打印一些變量來控制我的程序?
- 如何刪除臨時變量?
我是一名SAS新手,但是這是我到目前爲止已經試過:
%macro dot_product(X = ,y=, value=);
/* read number of rows */
%let X_id=%sysfunc(open(&X));
%let nrows=%sysfunc(attrn(&X_id,nobs));
%let rc=%sysfunc(close(&X_id));
data &X.;
set &X.;
array arr_X{*} _numeric_;
set &y.;
array arr_y{*} _numeric_;
do i = 1 to &nrows;
do j = 1 to &nrows;
value + arr_y[i]*arr_X[j + &nrows*(i-1)]*arr_y[j];
end;
end;
run;
%mend;
當我運行此:
%dot_product(X=X,y=y,value=val);
我得到這個錯誤:
ERROR: Array subscript out of range at line 314 column 158.
我正在使用它來生成數據:
data X;
array myCols{*} col1-col5;
do i = 1 to 5;
do j = 1 to dim(myCols);
myCols{j}=ranuni(123);
end;
output;
end;
drop i j;
run;
/* create a vector y */
data y;
array myCols{*} col1-col5;
do j = 1 to dim(myCols);
myCols{j}=ranuni(123);
end;
output;
drop j;
run;
在此先感謝您的幫助或任何想法調試我的數據。
謝謝。但我認爲我的問題在這裏不是數學。我知道如何按行/按列計算點積。我想用SAS來計算'x * A * t(x)'。 – agstudy
當然,你不能只在x和y上調用點積。你的x有25個組件,y有5個。但是你可以將x拼接成5個5的部分,爲它們中的每一個計算點積,形成一個新的向量u,然後計算u和y的點積。或者你生成z作爲y的二元產物,然後在x和z上調用點積。 – LutzL
我不明白。你能告訴我一些SAS代碼嗎? – agstudy