承认,这个问题不是很有意思,但是由于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在第二种情况下认为不需要警告?
答案 0 :(得分:5)
那是因为你已经通过数组声明在第三个例子中初始化了变量。声明数组时,除非您在数组定义中指定$(在这种情况下它们是缺少的字符(长度为8)),或者指定了初始化值,否则任何尚未存在的变量都会初始化为Numeric missing。