0

proc iml 内に 1、2、3 次元の変数/配列を作成したいと考えています。私のコードは次のようになります:

proc iml;
start Mean1(x);         /*this is 1 dimension variable/array*/
Mean1(x)=sum(x)/dim(x);
finish;

proc iml;
start Mean2(x);         /*this is 2 dimension variable/array*/
Mean1(x)=sum(x)/dim(x);
finish;

proc iml;
start Mean3(x);         /*this is 3 dimension variable/array*/
Mean1(x)=sum(x)/dim(x);
finish;

私はこのようにしようとしました:

proc iml;
declare double x[dim(n),dim(n)];
start Mean2(x);         /*this is 2 dimension variable or array*/
Mean1(x)=sum(x)/dim(a, x);
finish;

しかし、それは機能していません。私たちを手伝ってくれますか?

4

1 に答える 1

2

ここで知っておくべきことがいくつかあります。

  1. SAS IML 配列は、1 つのインデックス付きの C スタイルの行優先配列です。Fortran のような列優先ではありません。
  2. 私の知る限り、IML には 3 次元配列はありません。常に可能です私は間違っています。
  3. SAS の数値はすべて double です。
  4. IML には、手段を簡単かつ高速にする優れたリダクション演算子があります。

行列/配列を宣言するには、J(nrow,ncol,fill) 関数を使用します。

proc iml;
x = J(10,5,1); /*Declare a 10x5 matrix filled with 1s*/
x = normal(x);  /*Fills matrix X with random numbers, uses the values in X as the seed*/

mean_all = x[:]; /*mean over all values in x*/
mean_col = x[:,];/*mean of each column */
mean_row = x[,:];/*mean of each row */

print mean_all;
print mean_col;
print mean_row;

quit;

IML のドキュメントを読むことを強くお勧めします。 http://support.sas.com/documentation/onlinedoc/iml/index.html

于 2013-11-06T22:16:39.580 に答える