SAS Base Programming · 15-20%
一覧、度数、要約統計、カスタム format、ODS、EXPORT を使い、結果を人が読める形・外部ファイルへ渡せる形にする領域。
試験対策ハブ · 詳細項目
Goal
データセットを作るだけで終わらせず、確認用の一覧、検証用の集計、提出用のファイル出力まで一通り書ける状態を作ります。
01
PROC PRINT は最も基本的な一覧出力です。試験では、表示列、合計、条件、ID、BY、ラベル表示を組み合わせられることが重要です。
proc sort ... by region customer_id; は、BY レポートの前提として地域・顧客順に並べる。title と footnote はレポートの見出しと脚注を設定する。proc print ... label split="*"; は、ラベルを列見出しに使い、* で見出しを改行する。id、var、sum、where で、識別列・表示列・合計・行条件を指定する。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
一覧表では、単に全行を出すのではなく、問題文に合わせて列順、識別列、合計、列見出し、グループ単位を制御します。
VAR と IDVAR は表示する変数と順序を決める。ID は各行を識別する列を左側に置く。SUM と BYSUM は数値列の合計を出す。BY レポートは事前ソートが必要。LABEL と SPLIT=LABEL は列見出しとしてラベルを使う。SPLIT= は列見出しを指定文字で折り返す。02
これらの PROC はレポート作成だけでなく、データ品質の確認にも使います。カテゴリの種類、欠損、外れ値、合計値をすばやく確認します。
proc freq data=work.orders_clean nlevels;
tables region*status / missing;
run;
proc means data=work.orders_clean n mean sum min max maxdec=2;
class region; var amount; run;
proc univariate data=work.orders_clean;
var amount; run;
BY は事前ソートが必要。CLASS は分類変数で要約する。
Frequency
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;
NLEVELSORDER=region*status のように、2 つのカテゴリの組み合わせを確認する。Summary
PROC MEANS は基本統計量やクラス別集計に強く、PROC UNIVARIATE は極値や欠損、分布の確認に向きます。レポート作成だけでなく、作ったデータセットの検算にも使います。
n、nmiss、mean、sum などは出力する統計量を指定する。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;
件数、欠損、平均、合計、最小、最大を素早く見る。CLASS でカテゴリ別の要約を作る。
極端な値や欠損を見つけたいときに使う。データ品質確認の最後に役立つ。
03
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;
試験範囲には、データセットから format 定義を読み込む CNTLIN= も含まれます。大量のコードを手書きせず、定義表から format を作る仕組みです。
CNTLIN
CNTLIN= は、format 定義をデータとして持ち、PROC FORMAT に読み込ませる方法です。大量の範囲やラベルを手書きしないときに使います。
fmtname は作成する format 名、type は文字用か数値用かを指定する。start と end は範囲の下限・上限を表す。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;
FMTNAME、START、END、LABEL、TYPE の役割を押さえます。文字 format なら TYPE="C"、数値 format なら TYPE="N" です。範囲の LOW / HIGH は HLO で表します。
04
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 は PROC の結果を人が読むレポートとして出す仕組みです。PROC EXPORT と XLSX エンジンは、データセットを外部データとして渡すときに使います。
close で閉じる。DBMS=csv、DBMS=tab、DBMS=dlm などを指定する。Practice
PROC PRINT で列順、ID、合計、ラベル、条件を指定した一覧を作る。
PROC FREQ と PROC MEANS で、カテゴリ件数、欠損、合計、平均を検算する。
PROC FORMAT で金額帯やステータス表示を作り、レポートに適用する。
同じ結果を HTML、PDF、RTF、CSV、XLSX へ出力し、開閉ステートメントの位置を確認する。