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データセットのコンテンツ

CRTLデータセットのコンテンツ
最終更新: 2026年9月18日