FORMATプロシジャ

スポンサーリンク

概要:変数に対し独自の入力形式と出力形式を定義します。

構文
PROC FORMAT <option(s)>;
  EXCLUDE entry(s);
  INVALUE
    <$>name
    <(informat-option(s))>
    <value-range-set(s)>;
  PICTURE
    name <(format-option(s))>
    <value-range-set-1 <(picture-1-option(s))>>
    <value-range-set-2 <(picture-2-option(S))>> ...>;
  SELECT entry(s);
  VALUE
    <$>name
    <(format-option(s))>
    <value-range-set(S)>;
RUN;
ステートメントの説明
ステートメント必須解説
EXCLUDEカタログエントリをFMTLIBオプションとCNTLOUT=オプションによる処理から除外する。
INVALUE生データ値を読み込み、変換するための入力形式を作成する。
PICTURE数字を印刷するためのテンプレートを作成する。
SELECTFMTLIBオプションとCNTLOUT=オプションによって処理するためのカタログエントリを選択する。
VALUE変数値の印刷に使用する文字列を指定する出力形式を作成する。
必須ステートメントはありません。

例(valueステートメントのみ)

データセット
proc print data = sashelp.class;
run;

このデータセットにformatを当ててみます。

FORMAT設定
proc format;
  value $sex_fmt
    'M'='男'
    'F'='女';
  value height_fmt
    low - <60 = ' < 60'
    60 - <70  = '60 < 70'
    other     = '70 < ';
run;

その1

formatプロシジャで定義したformatを、formatステートメントで変換しています。

data test_1;
  set sashelp.class;
  format
    sex $sex_fmt.
    height height_fmt.;
run;

数値型のHeightに文字列が格納されていて変に見えますが、内部では数値型として保持しています。

その2

formatプロシジャで定義したformatを、put関数内で利用しています。

data test_2;
  set sashelp.class;
  sex_new    = put(sex,    $sex_fmt.);
  height_new = put(height, height_fmt.);
run;

put関数を利用して再定義すれば文字列型として格納できます。

コメント