FORMAT プロシジャ
例14: CNTLIN=データセットからの入力形式の作成
| 要素: |
PROC FORMATステートメントオプション: CNTLIN= 入力制御データセット |
詳細
この例では、CNTLIN=データセットから入力形式を作成する方法を示します。
手順は次のとおりです。
- 入力制御データセトからの入力形式の作成
- 既存するSASデータセットからの入力制御データセットの作成
プログラム
proc format;
invalue mytest
'abc'=1
'xyz'=2
other=3;
invalue $chrtest
'abc'='xyz'
other='else';
run;
data _null_;
input value:mytest. @@;
put value=;
datalines;
abc xyz ghi 4
run;
data _null_;
input value:$chrtest. @@;
put value=;
datalines;
abc xyz ghi 4
run;
data temp;
length start $8 type $1 hlo $1;
fmtname='newtest'; type='i';
start='abc'; label=1; hlo=' '; output;
start='xyz'; label=2; hlo=' '; output;
start=' '; label=3; hlo='O'; output;
run;
proc format cntlin=temp; run;
data temp;
length start label $8 type $1 hlo $1;
fmtname='$newchr'; type='j';
start='abc'; label='xyz'; hlo=' '; output;
start=' '; label='else'; hlo='O'; output;
run;
proc format cntlin=temp; run;
data _null_;
input value:newtest. @@;
put value=;
datalines;
abc xyz ghi 4
run;
data _null_;
input value:$newchr. @@;
put value=;
datalines;
abc xyz ghi 4
run;
data temp;
length start label $8 hlo $1;
fmtname='@new2test';
start='abc'; label='1'; hlo=' '; output;
start='xyz'; label='2'; hlo=' '; output;
start=' '; label='3'; hlo='O'; output;
fmtname='@$new2chr';
start='abc'; label='xyz'; hlo=' '; output;
start=' '; label='else'; hlo='O'; output;
run;
proc format cntlin=temp; run;
data _null_;
input value:new2test. @@;
put value=;
datalines;
abc xyz ghi 4
run;
data _null_;
input value:$new2chr. @@;
put value=;
datalines;
abc xyz ghi 4
run;
proc print data=temp noobs;
title 'The CTRL Data Set';
run;
プログラムの説明
INVALUEステートメントを使用して入力形式を作成します。数値入力形式と文字入力形式を作成します。
proc format;
invalue mytest
'abc'=1
'xyz'=2
other=3;
invalue $chrtest
'abc'='xyz'
other='else';
run;
数値入力形式をインストリームデータと共に使用します。このコードでは、VALUEの結果として1、2、3、および3が再度、生成されるはずです。
data _null_;
input value:mytest. @@;
put value=;
datalines;
abc xyz ghi 4
run;
文字入力形式をインストリームデータと共に使用します。このコードでは、VALUEの結果として、xyz、else、else、およびelseが生成されるはずです。
data _null_;
input value:$chrtest. @@;
put value=;
datalines;
abc xyz ghi 4
run;
CNTLIN=データセットを使用してMYTEST数値入力形式と同等のものを作成し、入力形式名NEWTESTを使用します。FMTNAME変数の値がNEWTESTであることを指定します。TYPE変数に値「i」または「I」を指定して、数値入力形式であることを示します。その他の場合はOの値を指定し、HLO変数の場合は空白値を指定します。
data temp;
length start $8 type $1 hlo $1;
fmtname='newtest'; type='i';
start='abc'; label=1; hlo=' '; output;
start='xyz'; label=2; hlo=' '; output;
start=' '; label=3; hlo='O'; output;
run;
文字入力形式をインストリームデータと共に使用します。このコードでは、VALUEの結果として、xyz、else、else、およびelseが生成されるはずです。
proc format cntlin=temp; run;
文字入力形式にはCNTLIN=データセットを作成します。この入力形式は、上記で作成された$CHRTEST入力形式と同等です。それには$NEWCHRという名前を指定します。TYPEの値は、それが文字入力形式であることを示すために'j'または'J'でなければなりません。
data temp;
length start label $8 type $1 hlo $1;
fmtname='$newchr'; type='j';
start='abc'; label='xyz'; hlo=' '; output;
start=' '; label='else'; hlo='O'; output;
run;
文字入力形式を作成するには、CNTLIN=データセットを読み込みます。この例では、 tempをCNTLINの値として使用しています。コード例を保存する場合は、よりわかりやすい名前を指定してください。
proc format cntlin=temp; run;
以前作成したバージョンと同じ2つのDATAステップを作成します。これらのバージョンには、入力形式名NEWTESTと$NEWCHRを使用します。
data _null_;
input value:newtest. @@;
put value=;
datalines;
abc xyz ghi 4
run;
data _null_;
input value:$newchr. @@;
put value=;
datalines;
abc xyz ghi 4
run;
FMTNAME値を@で始めることでそれが入力形式であることを示し、またタイプ変数が必要でないことを示します。同じCNTLIN=データセットで数値と文字の入力形式を作成することができます。文字出力形式が定義されているため、ラベル変数は文字でなければなりません。数値は、数値を含む文字列として保存されます。
data temp;
length start label $8 hlo $1;
fmtname='@new2test';
start='abc'; label='1'; hlo=' '; output;
start='xyz'; label='2'; hlo=' '; output;
start=' '; label='3'; hlo='O'; output;
fmtname='@$new2chr';
start='abc'; label='xyz'; hlo=' '; output;
start=' '; label='else'; hlo='O'; output;
run;
proc format cntlin=temp; run;
data _null_;
input value:new2test. @@;
put value=;
datalines;
abc xyz ghi 4
run;
data _null_;
input value:$new2chr. @@;
put value=;
datalines;
abc xyz ghi 4
run;
CNTLIN=データセットのコンテンツがリストで出力されます。テーブルに "CTRL Data Set"というラベルを付けます。
proc print data=temp noobs;
title 'The CTRL Data Set';
run;
CRTLデータセットのコンテンツ

最終更新: 2026年9月18日