SAS:当未初始化的变量是数组的一部分时,为什么没有'注意:变量未初始化'?

时间:2013-07-26 13:32:42

标签: arrays sas initialization

承认,这个问题不是很有意思,但是由于sas-log中的警告非常有用,我有时想知道这里发生了什么。

考虑以下最小例子。在第0步中,我们创建了一个数据集。在步骤1中,我们想要将步骤0中某个变量的值复制到step1,但是我们忘记了变量的正确名称(或者我们没记错,但是当我们离开时有人更改了它。)我写了两个版本的step1,名为step1a和step1b 。

Data step0; 
Dog = 1;
run;

Data step1a;
value = cat; 
run;

Data step1b; 
array animals cat;
value = animals[1];
run;

毋庸置疑,step1的两个版本都会生成相同的数据集,在本例中是一个带有变量'value'和'cat'的空数据集。

但是:当编写step1a的方式运行step1时,SASlog会警告我们出了问题:

NOTE: Variable cat is uninitialized.

我们可以回到我们的代码,注意我们认为猫是一直都是狗,看到我们的方式的错误,并产生我们想到的正确的数据集。

另一方面,当编写step1b的方式运行step1时,SASlog就好像一切都很好,我们可以在街上唱歌跳舞,但多年后才发现狗的价值是永远失去了。

所以问题是:为什么SAS在第二种情况下认为不需要警告?

1 个答案:

答案 0 :(得分:5)

那是因为你已经通过数组声明在第三个例子中初始化了变量。声明数组时,除非您在数组定义中指定$(在这种情况下它们是缺少的字符(长度为8)),或者指定了初始化值,否则任何尚未存在的变量都会初始化为Numeric missing。