4

確かに、この質問はあまり興味深いものではありませんが、sas-log の警告が非常に役立つことがあるため、ここで何が起こっているのか知りたいことがあります。

次の最小限の例を考えてみましょう。step0 では、データセットを作成しました。ステップ 1 では、step0 の変数の値を step1 にコピーしたいのですが、変数の正しい名前を忘れてしまいました (または、正しく覚えていても、離れたときに誰かが変更してしまいました)。step1a と step1b という名前の step1 の 2 つのバージョンを作成します.

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 が 2 番目のケースで警告が不要であると考える理由です。

4

1 に答える 1

5

これは、配列宣言を使用して、3 番目の例で変数を初期化したためです。配列を宣言すると、配列定義で $ を指定するか (この場合、文字が欠落しています (長さ 8))、または初期化された値を指定しない限り、まだ存在していない変数は Numeric missing に初期化されます。

于 2013-07-26T13:42:26.353 に答える