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 中的所有数字都是双精度数。
  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 回答