Click here to load reader
View
2
Download
0
Embed Size (px)
SPRING 2011 特集 SASから始めるSQL
01 09SAS Academic News - 事例紹介 - コラム「SAS四方山話」
Q&A
SASトレーニングのお知らせ
最新リリース情報
SASユーザー総会のお知らせ
18
21
23
24
For Higher Customer Satisfaction, We Bridge the SAS System Between Customer’s World.
SQLは長い歴史を持つデータベース操作言語で、現在も多くのリレー
ショナルデータベースで標準的に使用されています。SAS以外のリレー
ショナルデータベースでSQLを使用していた方は、その知識をSASで
直接生かすことができます。まだSQLに触れたことがない方も、これか
らSQLを学ぶ利点はあります。DATAステップとは異なる構文、異なる
データ処理方法を持つ言語を学ぶことで、プログラミングの幅を広げる
ことができます。例えば、複数のテーブルから情報を取得するような処
理はSQLを利用すると簡易に記述できるため、その箇所だけSQLで書
くケースがあります。処理の内容によってDATAステップとSQLを使い分
けることで、プログラムの開発効率をスマートに上げることができます。
02 [特集] SASから始めるSQL SPRING 2011
SQLとはリレーショナルデータベース管理システム(RDBMS)において、
データの抽出や更新を行うための言語です。標準規格として多くの
データベースでサポートされており、SASでもサポートしています。
SASでSQLを使うと、DATAステップとほぼ同等の処理をデータセット
や外部データベースのテーブルに対して行うことができます。また、
SQL文の中でSAS関数、データセットオプション、マクロなどSAS特有の
機能も使用することができます。
SQLとDATAステップにて使用する用語の名称が異なるものがありま
す。主な用語の違いについては以下の表をご覧ください。
SQLとDATAステップ用語比較表
1SQLとは
SQLプロシジャはBase SAS® に含まれるプロシジャです。SASでSQLを
使用する場合、次のようにSQLステートメントをSQLプロシジャの中に
記述します。
SQLステートメントは一つのまとまった処理を実行するための命令文で
す。複数の句によって構成され、必ずセミコロンで終わります。
また、下記のように一つのSQLプロシジャの中に複数の独立したSQL
ステートメントを記述することも可能です。
2SQLプロシジャ 特集
SASから始める SQL
SAS DATAステップにおける名称 SQLにおける名称
データセット
オブザベーション
変数
テーブル
行
カラム(列)
PROC SQL;
< SQLステートメント>;
/* QUITステートメントで終わる点に注意! */
QUIT;
PROC SQL;
< SQLステートメント>;
< SQLステートメント>;
< SQLステートメント>;
QUIT;
本特集ではSQLの基本であるデータの抽出と、代表的な処理である
テーブルの結合およびサブクエリについてサンプルプログラムと図を交
えてご説明します。
[特集] SASから始めるSQLSPRING 2011 03
上記のようにSELECT句から始まるSQLステートメントをクエリと呼ぶこ
とがあります。クエリには必ずSELECT句とFROM句が必要です。それ
以外の句は処理の内容に応じて追加します。
この章ではクエリにおけるさまざまな句の使い方について、サンプルプ
ロ グ ラ ム を 用 い て 説 明 し ま す。な お 、サ ン プルプ ロ グ ラ ムで は
sashelp.classを用います。これはSASのsashelpライブラリ配下に標準
で格納されているデータセット(テーブル)です。
sashe l p . c l assに格納されているデータは以下の通りです。なお、
SAS® 9.2から文字データが日本語に変更されています。
sashelp.classの内容
SQLプロシジャの中でSELECT句を使うと、抽出結果はアウトプット
ウィンドウに表示されます。SELECT句単体では、新しいテーブルは作
成されません。
また、次のようにSELECT句でアスタリスク(*)を指定するとすべてのカ
ラムが抽出されます。
3.1 データの抽出(SELECT句、FROM句) クエリの最も簡単な形は、次のようにSELECT句とFROM句のみを含み
ます。
SELECT文の前にCREATE TABLE ASステートメントを追加することで、
クエリの結果をテーブルに出力できます。大きいテーブルを扱う場合は
抽出結果をテーブルに出力することが有用です。
上記プログラムを実行するとworkライブラリの中にテーブルtable1が作
成されますが、他の恒久ライブラリの中にテーブルを出力することもでき
ます。
SQLで最も多く使用されるデータの抽出処理について説明します。
データの抽出とは、既存のテーブルからデータを読み込む処理です。
DATAステップの「データセットの読み込み」と同じ処理です。
SQLでデータの抽出処理を行うには、次のようなSQLステートメントを
記述します。
3データの抽出と加工
/* クエリの基本構文*/
PROC SQL;
SELECT カラム名
FROM ライブラリ名.テーブル名
WHERE 抽出条件
ORDER BY カラム名
;
QUIT;
/* 最も簡単なクエリ */ PROC SQL;
SELECT name, weight, age
FROM sashelp.class
;
QUIT;
Name
アルフレッド
アリス
バーバラ
キャロル
ヘンリー
ジェームズ
OBS
1
2
3
4
5
6
Sex
男子
女子
女子
女子
男子
男子
Age
14
13
13
14
14
12
Height
69
56.5
65.3
62.8
63.5
57.3
Weight
112.5
84
98
102.5
102.5
83
〈7行目以降省略〉
このクエリは、SELECT句で指定したカラム(name、weight、age)を、
FROM句で指定したテーブル(sashelp.class)から抽出し、結果をアウト
プットウィンドウに表示します。カラムはSELECT句で指定した順番で表
示されます。
PROC SQL;
/* すべてのカラムを抽出する */ SELECT *
FROM sashelp.class
;
QUIT;
PROC SQL;
/* 新規テーブルを作成 */ CREATE TABLE table1 AS
SELECT *
FROM sashelp.class
;
QUIT;
/* tempライブラリの割り当て */
LIBNAME temp "c:¥temp";
PROC SQL;
/* 新規テーブルを作成 */
CREATE TABLE temp.table1 AS
SELECT *
FROM sashelp.class
;
QUIT;
04 [特集] SASから始めるSQL SPRING 2011
3.2 データの並べ替え(ORDER BY句) 特定のカラムの値に応じて行を並べ替えるにはORDER BY句を用いま
す。下記の例では、カラムageに含まれる値に応じて行が昇順で並べ替
えられます。
デフォルトではデータは昇順で並べ替えられます。降順で並べ替えるに
はカラムの後に「DESC」を記述してください。
3.3 抽出条件の指定(WHERE句) WHERE句でデータの抽出条件を指定できます。WHERE句の条件に合
致した行がテーブルから抽出されます。
SQLのWHERE句では条件式を記述します。条件式は真・偽について評
価され、真の場合に限り該当の行が抽出されます。条件式では比較演
算子、論理演算子、または特殊演算子を用いることができます。それぞ
れにおける代表的な演算子を例に挙げて、説明します。
● 比較演算子 SAS DATAステップとほぼ同様の比較演算子を使うことができます。
例えばカラムageが15より大きい行を抽出するには、次のようなプログラ
ムを記述します。
SORTプロシジャと同様に、複数のカラムの値を対象とした並べ替え
を行うこともできます。次のようにORDER BY句で複数のカラムを指
定します。
SQLでは、クエリを実行すると行の順序が変わってしまう場合があります。