我正在尝试使用以下代码定义一个数组:
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.
查看文档示例,我不明白为什么这不起作用。我做错了什么还是不允许这样做?如果不允许,有什么替代的等效方法?
啊没关系 - 文档实际上确实说明了:
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;
临时数组的一般解决方案是过度定义临时数组。由于它不在 PDV 中,也没有写出(显然),您可以简单地将其定义为 50 或 100 或任何高于最大值的安全数字 - 这样做几乎不会花费任何性能。
或者,如果“安全数字”对于您所需的内存分配来说太大(例如,数万),请使用宏变量并预先计算数字。鉴于你写了
(1 2 3 4 5)
创建此列表时,您应该能够计算所需变量的数量。