SAS Base Programming · 15-20%

レポートとアウトプット生成

一覧、度数、要約統計、カスタム format、ODS、EXPORT を使い、結果を人が読める形・外部ファイルへ渡せる形にする領域。

試験対策ハブ · 詳細項目

Goal

この項目で到達する状態

データセットを作るだけで終わらせず、確認用の一覧、検証用の集計、提出用のファイル出力まで一通り書ける状態を作ります。

01

PROC PRINT で一覧レポートを作る

PROC PRINT は最も基本的な一覧出力です。試験では、表示列、合計、条件、ID、BY、ラベル表示を組み合わせられることが重要です。

構文解説: 一覧表の表示を制御する

  • proc sort ... by region customer_id; は、BY レポートの前提として地域・顧客順に並べる。
  • titlefootnote はレポートの見出しと脚注を設定する。
  • proc print ... label split="*"; は、ラベルを列見出しに使い、* で見出しを改行する。
  • idvarsumwhere で、識別列・表示列・合計・行条件を指定する。
proc sort data=work.orders_clean out=work.orders_report;
  by region customer_id;
run;

title "Orders by Region";
footnote "Generated for certification practice";

proc print data=work.orders_report label split="*";
  by region;
  id customer_id;
  var order_date product amount;
  sum amount;
  where amount > 0;
  label order_date = "Order*Date"
        amount = "Order*Amount";
run;

title;
footnote;

Print Details

PROC PRINT は「表示の制御」を細かく指定する

一覧表では、単に全行を出すのではなく、問題文に合わせて列順、識別列、合計、列見出し、グループ単位を制御します。

VARID

  • VAR は表示する変数と順序を決める。
  • ID は各行を識別する列を左側に置く。

SUMBY

  • SUM は数値列の合計を出す。
  • BY レポートは事前ソートが必要。

LABELSPLIT=

  • LABEL は列見出しとしてラベルを使う。
  • SPLIT= は列見出しを指定文字で折り返す。

02

FREQ / MEANS / UNIVARIATE で検証する

これらの PROC はレポート作成だけでなく、データ品質の確認にも使います。カテゴリの種類、欠損、外れ値、合計値をすばやく確認します。

PROC FREQ

proc freq data=work.orders_clean nlevels;
tables region*status / missing;
run;

PROC MEANS

proc means data=work.orders_clean n mean sum min max maxdec=2;
class region; var amount; run;

PROC UNIVARIATE

proc univariate data=work.orders_clean;
var amount; run;

BY と CLASS

BY は事前ソートが必要。CLASS は分類変数で要約する。

Frequency

PROC FREQ はカテゴリ確認と検算の中心

PROC FREQ は一元表と二元表を作るだけでなく、カテゴリの種類、欠損、想定外の値を見つける検証用 PROC として使います。

構文解説: 度数表でカテゴリを検算する

  • nlevels は、各変数に何種類の値があるかを表示する。
  • order=freq は、度数の多い順に結果を並べる。
  • tables region status は一元表、region*status は二元表を作る。
  • / missing は欠損値も度数表に含める。
proc freq data=work.orders_clean nlevels order=freq;
  tables region status region*status / missing;
run;

NLEVELS

  • 変数ごとの水準数を確認する。
  • 表記ゆれや想定外カテゴリの発見に使う。

ORDER=

  • 度数表の表示順を制御する。
  • 頻度順やデータ順など、問題文の指定に合わせる。

二元表

  • region*status のように、2 つのカテゴリの組み合わせを確認する。
  • 抽出条件や分類変数の作成ミスを見つけやすい。

Summary

PROC MEANS と UNIVARIATE は、集計と異常値確認で使い分ける

PROC MEANS は基本統計量やクラス別集計に強く、PROC UNIVARIATE は極値や欠損、分布の確認に向きます。レポート作成だけでなく、作ったデータセットの検算にも使います。

構文解説: 要約統計と極値確認

  • nnmissmeansum などは出力する統計量を指定する。
  • class region status; は地域・ステータス別に要約する。
  • var amount; は統計量を計算する数値変数を指定する。
  • PROC UNIVARIATE は、極値や分布を詳しく確認するときに使う。
proc means data=work.orders_clean n nmiss mean median sum min max maxdec=2;
  class region status;
  var amount;
run;

proc univariate data=work.orders_clean;
  var amount;
run;
MEANS

集計の確認

件数、欠損、平均、合計、最小、最大を素早く見る。CLASS でカテゴリ別の要約を作る。

UNIVARIATE

極値と分布

極端な値や欠損を見つけたいときに使う。データ品質確認の最後に役立つ。

03

PROC FORMAT とラベルで出力を読みやすくする

PROC FORMAT は値の表示を変えます。保存値そのものは変えず、レポート上の見え方を変える点が重要です。

構文解説: 値を表示用グループに変える

  • proc format; でユーザー定義 format を作る。
  • value amountgrp は数値用の format 名を定義する。
  • low-<3000 は 3000 未満、3000-<10000 は 3000 以上 10000 未満を表す。
  • format amount amountgrp.; は、保存値を変えずに表示だけグループ名へ変える。
proc format;
  value amountgrp
    low-<3000 = "Low"
    3000-<10000 = "Middle"
    10000-high = "High";
run;

proc print data=work.orders_clean label;
  var customer_id order_date amount;
  format amount amountgrp.;
  label customer_id = "Customer ID"
        order_date = "Order Date";
run;
CNTLIN=

試験範囲には、データセットから format 定義を読み込む CNTLIN= も含まれます。大量のコードを手書きせず、定義表から format を作る仕組みです。

CNTLIN

format 定義をデータセットから作る

CNTLIN= は、format 定義をデータとして持ち、PROC FORMAT に読み込ませる方法です。大量の範囲やラベルを手書きしないときに使います。

構文解説: CNTLIN 用データセットの列

  • fmtname は作成する format 名、type は文字用か数値用かを指定する。
  • startend は範囲の下限・上限を表す。
  • label は表示する文字列を指定する。
  • hlo は LOW や HIGH などの特殊範囲を指定する。
  • proc format cntlin=... で、その定義データセットから format を作る。
data work.amount_format;
  length fmtname $ 12 start 8 end 8 label $ 12 type $ 1 hlo $ 1;
  fmtname = "amountgrp";
  type = "N";

  hlo = "L"; start = .; end = 2999; label = "Low"; output;
  hlo = ""; start = 3000; end = 9999; label = "Middle"; output;
  hlo = "H"; start = 10000; end = .; label = "High"; output;
run;

proc format cntlin=work.amount_format;
run;
確認ポイント

FMTNAMESTARTENDLABELTYPE の役割を押さえます。文字 format なら TYPE="C"、数値 format なら TYPE="N" です。範囲の LOW / HIGH は HLO で表します。

04

ODS と EXPORT でファイルへ出す

ODS は SAS の出力先を制御します。HTML、PDF、RTF、Excel などの出力に使います。単純な外部データファイル作成には PROC EXPORT も使えます。

構文解説: レポート出力とデータ出力を分ける

  • ods html/pdf/rtf file=... は、PROC の出力を指定ファイルへ送る。
  • style= は ODS 出力の見た目を指定する。
  • ods ... close; は、開いた出力先を閉じる。
  • proc export は、SAS データセットを CSV などの生データファイルへ書き出す。
  • libname out xlsx は Excel ワークブックを出力先ライブラリとして扱う。
ods html file="/home/user/report.html" style=htmlblue;
ods pdf file="/home/user/report.pdf" style=journal;
ods rtf file="/home/user/report.rtf" style=journal;

proc means data=work.orders_clean n mean sum maxdec=2;
  class region;
  var amount;
run;

ods rtf close;
ods pdf close;
ods html close;

proc export data=work.orders_clean
            outfile="/home/user/orders_clean.csv"
            dbms=csv
            replace;
run;

libname out xlsx "/home/user/orders.xlsx";
data out.orders_clean;
  set work.orders_clean;
run;
libname out clear;

Output Checks

ODS と EXPORT は「何を出すか」で選ぶ

ODS は PROC の結果を人が読むレポートとして出す仕組みです。PROC EXPORT と XLSX エンジンは、データセットを外部データとして渡すときに使います。

ODS HTML / PDF / RTF

  • 一覧表や集計結果など、PROC の出力をレポートとして保存する。
  • 開いた出力先は、最後に対応する close で閉じる。

PROC EXPORT

  • シンプルな生データファイルを作る。
  • DBMS=csvDBMS=tabDBMS=dlm などを指定する。

XLSX エンジン

  • Excel ワークブックをライブラリのように扱ってデータを書き出す。
  • 複数シートへ出したい場合に、メンバ名をシート名として使える。

Practice

この項目の演習

一覧表

PROC PRINT で列順、ID、合計、ラベル、条件を指定した一覧を作る。

検証表

PROC FREQPROC MEANS で、カテゴリ件数、欠損、合計、平均を検算する。

表示形式

PROC FORMAT で金額帯やステータス表示を作り、レポートに適用する。

出力

同じ結果を HTML、PDF、RTF、CSV、XLSX へ出力し、開閉ステートメントの位置を確認する。