【SAS勉強会 -第1回-】SASの基本的な構成

f:id:pinkie79:20210902163531p:plain

皆さん、こんにちは。skybluefantasistaです。


猛暑日が続くと思いきや、雷雨や線状降水帯による大雨など、なかなかに天気が荒れ模様な8月となりました。暑さもですが、新型コロナウイルスも変わらず猛威を振るっている状況であることも気になるところです。
一刻も早い事態の収束を願うばかりですね。
 
さて、今回はSASの基本的な作法について紹介していきます。
SAS未経験の方も一緒に学んでいきましょう!

 

 

1.SASプログラムの基本的な書き方

SASはデータ解析や統計分析、解析結果の可視化などを行うことができます。蓄積された様々なデータをグラフや表で表すことができるので、あらゆる場面で活躍しています。

1-1. データセットとライブラリ

1-1-1.データセット

まずはじめに、SASを扱うにあたって何度も出てくる単語があります。それが「データセット」と「ライブラリ」。データセットとは何かしらの目的で集められたデータを、文字や数値を使って整えたデータの集合体のことです。また、そのデータセットが置いてある領域のことをライブラリといいます。

 

クラスごとの生徒情報が書かれたリストを「データセット」、それらを収納する箱のようなものを「ライブラリ」とイメージしていただくとわかりやすいと思います。

f:id:skybluefantasista:20210817231644p:plain

1-1-2.ライブラリ

ライブラリは2種類あります。「一時ライブラリ」と「永久ライブラリ」です。

 

「一時ライブラリ」は文字通り一時的に作成されるライブラリです。SASを起動しているときに自動でWORKという名前で定義され、SAS終了と同時に消えてしまいます。

「永久ライブラリ」は、その名の通り削除しない限り永久に残るライブラリです。

イメージとしては、「買い物リストのメモ」といったところでしょうか。例えば、Aさんは今夜オムライスを作るとします。そのためにはまず、材料をそろえる必要があります。買い物リストに人参、玉ねぎ、とり肉、卵などをリスト表にして買い物に出かけました。無事買い物から帰ったAさんは、さっそく調理に取り掛かります。レシピを見ながら調理し、満足のいったオムライスが出来上がりました。
 
一連の動作をSASの動作として置き換えてみるとどうでしょう。
買い物リストのメモ(WORK)は、すべての動作が終わった後(SAS終了)には不要です。ここで捨てられるのが「一時ライブラリ」です。
いやいや、まだそのメモ使いますよという場合は、どこか別の場所に保管することになります。残しておきたいメモは、保管場所に入れます。これが「永久ライブラリ」です。

f:id:pinkie79:20210902155812j:plain

1-2. 3つの構成要素

では、実際どのようにSASプログラムを書いていくのかという点についてお話しします。
大まかに分けて構成は、ステートメント」DATAステップ」PROCステップ」の3つです。一つずつ見ていきましょう。

1-2-1.ステートメント

ステートメントは、SAS起動中に適用する設定の追加、変更を行います。
ライブラリの定義だったり、変数定義などの細かな設定をここで行います。たくさんのステートメントがありますが、今回は2種類のステートメントを紹介します。
 
LIBNAMEステートメント(2.プログラム例:2行目)
これは先ほど説明したあるものに関係しています。そう、ライブラリです。
LIBNAMEステートメントは、ライブラリ参照名の関連付けを行います。名前を付けたり、割り当てるパスの設定などライブラリ関連の設定を行います。
基本的な使い方としては、LIBNAME [ライブラリ参照名] "[割り当てるパス]" です。
これを設定することによって、永久ライブラリの仲間入りをします。

 

f:id:skybluefantasista:20210826201657p:plain

 

また、永久ライブラリの中には自身で設定したライブラリのほかにも、SASHELPライブラリなどのサンプルSASテーブルが存在しています。こちらは、SAS学習時に挙動を試してみたい、確認したいときなどに使ってみることをオススメします。


ATTRIBステートメント(2.プログラム例:8行目)
こちらは頻繁に使われます。これからSASのデータをこんな形式で作ります!という基本情報を定義するステートメントです。変数の入出力形式や、長さ、ラベルなどを定義しています。
基本的な形としては、ATTRIB [変数1] length=[長さ] label="[ラベル名]"です。
ここでポイントとしておさえておきたいのは、長さについてです。カラム(列)ごとに「文字列」または「整数列」を指定できますが、文字列を指定するときは必ず「$」をつけて、「length=$8.」と表します。これは整数列でも同様ですが、長さのデフォルトのバイト数は「」なので基本はこの数値に設定しておきます。

 

f:id:skybluefantasista:20210826201704p:plain

1-2-2.DATAステップ

ステートメントの次に、「DATAステップ」。(2.プログラム例:5行目)
DATAステップは、データソースからデータを読み込んで、SASデータセットを作成し、データの加工を実施する部分のことを指します。この加工段階で、上記のATTRIBステートメントを用いたり、演算子を用いた計算をします。

 

1-2-3.PROCステップ

最後にPROCステップ」。(2.プログラム例:21行目)
PROCステップは、SASデータセットのデータを使って集計や描画などの様々な分析を行う部分のことを指します。複数の処理を行ってくれるプロシジャと呼ばれるものがあるので、それらを使って分析をします。SQLを使うSQLプロシジャも、プロシジャの1つです。

2.プログラムの例

実際にSASプログラムを書いて実行してみました。

 f:id:skybluefantasista:20210818002344p:plain

 

※左(実行前)→右(実行後)

f:id:skybluefantasista:20210818002448p:plain

LIBNAMEステートメントによって、ライブラリが追加されました。

また、プログラム実行によって、DATAステップとPROCステップの結果は以下のようになります。

 

f:id:skybluefantasista:20210818002334p:plain

ATTRIBステートメントによって、変数Aに長さとラベルが適用されています。

ここで補足事項が3点。
1点目は、ステートメントごとに必ず「;(セミコロン)」をつけましょう。
このセミコロンを忘れは、エラー発生の大きな原因になります。
私も何度か付け忘れによるエラーを繰り返したことがあります。
見落としがちなミスなので気をつけましょう!

2点目は、DATAステップとPROCステップの終わりに、終了の合図RUNステートメントを加えるということです。省略することはできますが、プログラムの誤作動を引き起こす要因になることや、他の人がプログラを見たときに構造が分かりづらいということもあるので、RUN;で閉じましょう。セミコロンも忘れずに!

3点目は、PROCステップのお隣にある「PRINTプロシジャ」。これは文字通り、データセットの中身を出力するというものです。今回はサンプルデータのある、SASHELPライブラリのCLASSというデータセットを出力しました。

 

3.おわりに

長くなってしまいましたが、いかがでしたでしょうか。
SASの基本的な部分について今回はお話しさせていただきました。
ほかにもお話ししたいステートメントがいくつかあるのですが、今回は基本的なものを紹介させていただきました。
これを機に、少しでもSASに興味を持っていただけたらと思います。
ここまでご覧くださり、ありがとうございました。

 

さらに詳しい資料はこちらから。

データ分析の必要性から、CSSが取り組んできたデータ分析の実績や事例までをまとめてご説明します。

marketing.css-net.co.jp

 

SAS勉強会 第2回の記事はこちら👇

blog.css-net.co.jp