0

我正在尝试使用以下代码定义一个数组:

data all_dates;
  array arr[*] _temporary_ (1 2 3 4 5);
run;

它给了我这个信息:

ERROR: The non-variable based array arr has been defined with zero elements.

查看文档示例,我不明白为什么这不起作用。我做错了什么还是不允许这样做?如果不允许,有什么替代的等效方法?

4

2 回答 2

1

啊没关系 - 文档实际上确实说明了:

You cannot use the asterisk with _TEMPORARY_ arrays or when you define a multidimensional array.

我想我必须事先计算我需要的元素数量,然后使用:

data all_dates;
  array arr[*] a1-a5 (1 2 3 4 5);
  drop a1-a5;
run;
于 2012-11-08T16:35:30.497 回答
1

临时数组的一般解决方案是过度定义临时数组。由于它不在 PDV 中,也没有写出(显然),您可以简单地将其定义为 50 或 100 或任何高于最大值的安全数字 - 这样做几乎不会花费任何性能。

或者,如果“安全数字”对于您所需的内存分配来说太大(例如,数万),请使用宏变量并预先计算数字。鉴于你写了

(1 2 3 4 5)

创建此列表时,您应该能够计算所需变量的数量。

于 2012-11-08T16:42:15.873 回答