FORMATプロシジャは「1→男、2→女」や「Y→YES、N→NO」のような読み替え・変換を行う事が出来るプロシジャです。
今回はもっとも基本的な「VALUEステートメント」から解説をしていきます。
※ VALUEステートメントの重要な性質(落とし穴)についても、解説記事のリンクを最後の方に載せてるので、そちらも要確認!
※ VALUEステートメントの重要な性質(落とし穴)についても、解説記事のリンクを最後の方に載せてるので、そちらも要確認!
ではまず読み替えを行うフォーマットの定義から。
proc format;
value TEST1_
1 = "MALE"
2 = "FEMALE"
;
value $TEST2_
"Y" = "YES"
"N" = "NO"
;
run;
|
- 「TEST1_」というフォーマットを定義し、「1→MALE、2→FEMALE」 という読み替えを定義(数値に対するフォーマットを「数値フォーマット」という)
- 「TEST2_」というフォーマットを定義し、「Y→YES、N→NO」 という読み替えを定義(文字値に対するフォーマットを「文字フォーマット」という)
構文
PROC FORMAT;
VALUE フォーマット名
値 = 割り当てる文字
値 = 割り当てる文字
・・・
;
RUN;
|
ポイント
- フォーマット名の最後は数字じゃダメ(例えば「TEST1」など)
- 「"Y"→"YES"」のような文字から文字への読み替えを行うフォーマットは、フォーマット名の先頭に「$」をつける(例えば「$TEST」など)
では、先程つくったフォーマットを使ってみましょう。
* Sample data ;
data DT1;
SEX=1; YN="Y"; output;
SEX=2; YN="N"; output;
* 変数にフォーマットを割り当てる ;
data DT2;
set DT1;
format SEX TEST1_. YN $TEST2_.;
run;
|
「FORMATステートメント」 を使って以下を行なっています。
- 変数SEX に フォーマット「TEST1_」を割り当て。
- 変数YN に フォーマット「TEST2_」を割り当て。
結果を見ると分かりますが、SEX と YN がそれぞれ対応するフォーマット値に読み替えられていますね。
構文
FORMAT 変数名 割り当てるフォーマット名. ;
|
ポイント
- 割り当てるフォーマット名の後ろにドット「.」を入れる必要があります。
- あくまでも変数にフォーマットを割り当てているだけです(例えば上の例でSEXの値は「MALE」「FEMALE」に置き換わったように見えますが、それは見た目だけで、内部では元の値「1」「2」のままです)
* Sample data ;
data DT1;
SEX=1; YN="Y"; output;
SEX=2; YN="N"; output;
set DT1; length SEX2 YN2 $20.; SEX2 = put( SEX, TEST1_.); YN2 = put( YN , $TEST2_.); run;
|
「PUT関数」 を使って以下を行なっています。
- 変数SEX の値を フォーマット「TEST1_」を使って変換し、結果を変数SEX2 に格納。
- 変数YN の値を フォーマット「TEST2_」を使って変換し、結果を変数YN2 に格納。
構文
新規変数名 = PUT( 変数名 , フォーマット名. );
|
ポイント
- フォーマット名の後ろにドット「.」を入れる必要があります。
- 先程の例では見た目だけフォーマット値にしていましたが、今回は値そのものをフォーマット値に変換しています。
- 文字フォーマットで欠損値を表す場合「" " = "欠損値"」のような指定になります(「""」ではなく「" "」というように間に半角スペースを入れないと欠損値の意味にならない)
- FORMATの落とし穴【デフォルト長】
- FORMATの落とし穴【数値フォーマット】
1. VALUEステートメント
3. 範囲の指定
4. PICTUREステートメント1
5. PICTUREステートメント2
6. PICTUREステートメント3
7. フォーマットカタログの保存
8. CNTLOUT=オプション
9. CNTLIN=オプション
5. PICTUREステートメント2
6. PICTUREステートメント3
7. フォーマットカタログの保存
8. CNTLOUT=オプション
9. CNTLIN=オプション
0 件のコメント:
コメントを投稿