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