LENGTH
ステートメントに「バイト」がどのくらいあるかを説明してください。私はいつも1バイトが1文字または1数字に等しいと考えましたが、それはそうではないようです。また、なぜそれの構文がFORMAT
文の構文と異なるのですか?SAS LENGTHステートメント:バイトとは何ですか?
/*FORMAT Statement Syntax*/
FORMAT variable_name $8.;
/*LENGTH Statement*/
LENGTH variable_name $ 8
LENGTH
ステートメントに「バイト」がどのくらいあるかを説明してください。私はいつも1バイトが1文字または1数字に等しいと考えましたが、それはそうではないようです。また、なぜそれの構文がFORMAT
文の構文と異なるのですか?SAS LENGTHステートメント:バイトとは何ですか?
/*FORMAT Statement Syntax*/
FORMAT variable_name $8.;
/*LENGTH Statement*/
LENGTH variable_name $ 8
構文が異なるのは異なるためです。 LENGTH
ステートメントは、変数のタイプと、変数をデータセットに格納するのに必要な容量を定義します。 FORMAT
ステートメントは、どのFORMATを変数に付加するかを定義し、SASが値をログウィンドウまたは出力ウィンドウに書き出すときに変数を変換する方法を認識するようにします。
長さステートメントの$は、文字変数を定義することを意味します。 format文の$は、変数にアタッチする書式の名前の一部に過ぎません。文字変数で使用できる形式は、$
で始まり、数値形式では始まりません。 SASが変数名と区別できるように、フォーマットには期間が必要です。ただし、LENGTH文で使用される長さは整数なので、ピリオドは必要ありません(ただし、整数値の後に追加すると無視されます)。
FORMAT文が変数を定義するように使用されているSASコードでは、多くの混乱があります。これは、SASがデータステップで初めて変数を定義する方法を推測するためにのみ有効です。したがって、どのタイプの変数を意味するのかを推測するために、添付するフォーマットの詳細を使用します。したがって、最初に代入文x=2+3
でXを参照すると、SASはXが数値でなければならないと推測し、デフォルトの長さを8にします。しかし、Xが最初に表示される場所がformat x $10.
のような形式の文であれば、 Xを長さ10の文字変数にして、書式の幅に合わせます。
文字の表現方法と保存方法は、使用しているエンコーディングによって異なります。シンプルな7ビットASCIIコードを使用している場合は、文字とそれを格納するために必要なバイト数との間に1対1の関係があります。しかし、UTF-8を使用している場合は、1文字を格納するのに最大4バイトかかることがあります。
数値変数の場合、SASはIEEE 64ビット形式を使用するため、変数の格納に使用されるLENGTHとそれを表示するために使用される形式の幅との関係ははるかに複雑です。すべての数値変数を長さ8として定義することをお勧めします.SASでは、8バイト未満の長さの数値変数を定義することができますが、SASデータセットに値を書き込むときに余分な精度のビットをスローします。整数を格納するときには、予想される最大の数を格納するのに十分なビットが残っている限り、精度の低下なしにこれを行うことができます。浮動小数点値の場合、精度が失われます。