2015-09-05 10 views
6

このような完全に知られていない質問の申し訳ありませんが、私はSASを知らず、コードの1行が何であるか知る必要があるので、誰かが助けてくれることを願っています。 変数の配列にループがあり、.Zとの比較に基づいたif節がありますが、この変数はどこにも定義されていないので、これはSAS構文のトリックです。ここではループがあります:SASで `.Z`とは何ですか?

ARRAY PTYPE{*} X4216 X4316 X4416 X4816 X4916 X5016; 

DO I=1 TO DIM(PTYPE); 
    IF (PTYPE{I}<=.Z) THEN PUT &ID= PTYPE{I}=; 
END; 

だから、最初の反復で、ループはX4216の値が.Zよりも小さいかどうかをチェックし、う...? IDはデータセット内で別のものですが、そのif節の右側に何が起こっているのかわかりません。私はアンパサンドがマクロを参照していることを理解するためにSASのドキュメントを簡単に調べましたが、SASの知識は何が起こっているのかを理解するために限られています。

誰でも私を啓発できますか?

答えて

11

.Zは特別な欠損値です。 SASでは、欠損値(NULL値と呼ぶもの)はピリオドで示されます。ピリオドで区切られた27個の特別な欠損値もあり、その後に文字またはアンダースコアが続きます。欠損値は区別され、すべての実際の数値よりも小さいとみなされます。 .Zは「最大」です。したがって、値がない場合、基本的にはPTYPE{I}<=.Zがテストされます。代わりにMISSING(PTYPE{I})を使用して同じテストを行うことができます。右側には、値が欠落している配列の変数の名前と値、およびマクロ変数IDに名前が付けられた変数の名前と値が書き込まれます。

+0

クール、ありがとうございます!だから、私はこの全部を警告の構成物として解釈することができます。それは、価値が欠落している観測のIDを印刷するだけです。 –

+2

はい、正しい解釈です。 – Quentin

+0

私は 'myVar = .'をもう一度書くつもりはありませんが、常に' missing(myVar) ' –

関連する問題