目次
1. SASステートメント
SASステートメントはSASに処理させるための命令文で、多様な処理に対応した多数のステートメントが用意されています。
SASの構文ルール
- 原則、キーワードで始まる
- ステートメントの末尾に必ずセミコロン(;)を付ける
- ステートメントに記述する各要素(キーワード、変数名、関数など)は、1つ以上のブランクまたはTABで区切る
- フリーフォーマットで書ける
- →任意の位置に記述することができる
- →ひとつのステートメントを数行にまたがって書ける
- →複数のステートメントを1行にまとめて書ける
2. DATAステップとPROCステップ
個々にSASステートメントを記述しただけでは、SASは処理を実行してくれない。SASのプログラムは、基本的に「DATAステップ」「PROCステップ」という2つの要素で構成する必要があり、プログラムの実行はこのステップ単位でおこなわれる。それぞれのステップの実態は、複数のSASステートメントをまとめた固まりに過ぎない。
①DATAステップ
DATAステップは、主にSASデータセットの作成・編集を行うためのステップである。
DATAステップの基本構造
data SASデータセット名; ① SASステートメント; ② SASステートメント; ・・・; run; ③
①DATAステートメント
・DATAステートメントにより、DATAステップの開始を宣言
・作成するSASデータセット名も指定
②SASステートメント
・目的に応じたSASステートメントを、原則、処理する順にしたがって上から記述していく(手続き型言語的)
・つまり、処理は上から順におこなわれる
③RUNステートメント
・RUNステートメントにより、DATAステップの終了を宣言
・DATAステートメントとRUNステートメントで囲まれた範囲が一気に実行される
DATAステップでおこなう処理の具体例
・ローデータ(外部ファイル)を読み込み、新しいSASデータセットを作成する・既存のSASデータセットを読み込み、サブセット化(データを絞ること)、新しいデータ値の作成、データ値の変換などをして新しいSASデータセットを作成する
・複数のSASデータセットを結合(マージ)して新しいSASデータセットを作成する
・外部ファイルにデータ値を出力する(ファイルの書き出し)
②PROCステップ
PROCステップは、SASデータセットに対してプロシジャを使った特定処理をおこなうためのステップである。プロシジャとは、特定の処理をおこなうためにSASが提供してくれるサブプログラムのことである。PROCステップは、プログラムの書き方自体はプロシジャごとにほぼ決まっているので、プログラミングの難易度はDATAステップに比べると格段に低い。
PROCステップの基本構造
proc プロシジャ名 data=SASデータセット名; ① 付随するSASステートメント ; ② 付随するSASステートメント ; ・・・; run; ③
①PROCステートメント
・PROCステートメントにより、PROCステップの開始を宣言
・呼び出すプロシジャ名を指定
・data=の後にプロシジャ処理を適用するSASデータセット名を指定
②付随するSASステートメント
・個々のプロシジャごとに決められた付随するSASステートメントを記述
・指定できるステートメントの種類は、各プロシジャともそれ程多くはない
・プロシジャに付随するステートメントは、「処理する順」という観点ではDATAステップと異なり、記述順を考慮する必要はない
③RUNステートメント
・RUNステートメントにより、PROCステップの終了を宣言
・指定したSASデータセットに対して、呼び出したプロシジャの処理がおこなわれる
主なプロシジャ
PRINT、REPORT、PLOT、CHARTなど・統計処理のためのプロシジャ
CORR、FREQ、MEANS、STANDARD、SUMMARY、UNIVARIATEなど・多変量解析のためのプロシジャ
REG、CANDISC、PRINCOMP、FACTOR、FASTCLUS、CORRESPなど・データ加工および変換のためのプロシジャ
APPEND、SORT、TRANSPOSEなど
・データセット管理のためのプロシジャ
→CONTENTS、COPY、DATASETSなど
・その他のプロシジャ
→FORMAT、PRINTTOなど
3. SASデータセット
プロシジャを使ってデータを処理するためには、SASが扱うことのできる形式でデータを用意する必要がある。このSAS独自のデータ形式を「SASデータセット」と呼ぶ。SASデータセットの作成は基本的にはDATAステップでおこなう。しかし、プロシジャ(PROCステップ)を使ってSASデータセットを作成することもある。
①ディスクリプタ部とデータ部
SASデータセットは、「ディスクリプタ部」と「データ部」という2つの要素で構成されている。
・データ部
「データそのもの」が格納されている部分である。具体的には表計算ソフトのシートやデータベースのテーブルと同様の2次元の行列イメージ形式で、行側がレコード・列側がフィールドに対応している。SAS用語では、行(レコード)側を「オブザべーション」、列(フィールド)側を「変数」と呼ぶのが通例となっている。
・ディスクリプタ部
「SASデータセットに関する属性情報(データセット名、オブザべーション数など)」と「格納されている変数の属性情報(変数名、タイプ、長さなど)」が含まれている。
※日々のプログラミング作業において、プログラマがディスクリプタ部のことを詳細に意識する必要はない。SASシステムはSASデータセットを処理する際、単にデータ値のみを読み取るだけではなく、その処理の裏側でディスクリプタに記述された各種属性情報をもとにいろいろ動いてくれている。その結果、SAS言語は、他の一般的なプログラム言語に比べて、プログラミングの負担がある程度軽減されていることは、知っておいたほうが良いだろう。
②SAS変数
SASデータセットの変数には、以下の2種類のタイプがある。
・文字変数(表示するためのデータ値を格納する)
→あらゆるデータ値(文字・数字・特殊文字・空白)を格納できる
→格納できる長さは、最大32767バイト ※1バイトは半角1文字分
・数値変数(計算するためのデータ値を格納する)
→数値を浮動小数点形式で格納
→最大の長さは8バイト(倍精度浮動小数点)※これがデフォルト
※数値変数の長さとは、桁数ではなく浮動小数点形式で使用するバイト数であることに注意。
8バイトの浮動小数点で約15桁の数値が扱える。
個々の変数がどちらのタイプになるのかはプログラムの記述に依存するが、作成時に明示的にタイプを示さない場合は、数値変数となるのが基本である。
③SASデータセット名と変数名
SASデータセット名とSAS変数名についてのネーミングルールは以下のとおり。
ネーミングルール
・長さは32バイトまで・最初の文字はアルファベットかアンダーバー(_)のみ使用可能
・2文字目以降は、アルファベット、アンダーバーに加えて数値も使用可能
※アルファベット・アンダーバー・数値すべて半角のみ使用可能
※アルファベットの大文字・小文字は区別しない
④欠損値
SASデータセット内では、各オブザべーションに対して、すべての変数に対する値が必要である。欠損値も有効な値として格納される。
data sample; length name $10. age 8. ; name = "石井"; age = 32; output; name = ""; age = 24; output; name = "山田"; age = .; output; run;
name:文字変数であり、欠損値として「""(ブランク)」が格納されている。 age :数値変数であり、欠損値として「.(ピリオド)」が格納されている。