proc sqlは同じ処理をデータステップでも実現可能なので、実務上ではそこまで必須というわけではありませんが、今後pythonやSQLといった他言語の習得を考えている人や、もっと効率的に可読性の高いコードを書きたい人は覚えておいて損はないかと思いますので、自分用メモを公開したいと思います。
Contents
定義
SQLではデータセットのことをテーブル、変数をカラム、オブザベーションを行と呼びます。
むしろSASでの呼び方の方が独特。
基本構文
proc sql < options >;
select < column names >
from < tables for query >
where < expression >
group by < columns >
having < expression >
order by < columns >;
quit;
- select句: カラムを選択する
- from句: クエリ先のテーブルを指定する
- where句: select句の結果から、条件文に合致するデータを抽出する
- group by句: 指定したカラムに基づいてデータを分類しグループ化する
- having句: group by句によりグループ化した結果から、条件式に基づいてデータを抽出する
- order by句: クエリ結果を指定したカラムに基づいてソートする
句の並び順を上記の順番にしなければなりません。
基本操作
新規テーブルを作成する
create table ds1 as
select origin, make, mpg_city
from sashelp.cars;
create table テーブル名 as ….でクエリ結果を新規テーブルとして出力します。
すべてのカラムを選択する
select *
from sashelp.cars;
*(アスタリスク)はすべてのカラムを意味します。
指定したカラムを選択する
select make, type, origin
from sashelp.cars;
複数のカラムを選択する場合はカンマで区切ります。
出力する行数を指定する
proc sql outobs=10;
select * from
sashelp.cars;
quit;
outobsオプションで出力したい行数を指定します。
変数名の変更
select make as var1,
type as var2,
origin as var3
from sashelp.cars;
変更前の変数名 as 変更後の変数名 とすることで、変数名を変更できます。データステップのrenameステートメントと同等の機能です。
新規変数の作成
select mpg_city,
(mpg_city/1000) as var1
from sashelp.cars;
既存の変数mpg_cityから算出した値を新規変数var1に格納しています。
直前で新規作成した変数を参照する
select mpg_city,
(mpg_city/1000) as var1,
calculated var1*3 as var2
from sashelp.cars;
calculatedキーワードを使用するとsql文内で直前に新規作成した変数を参照できます。
上記の例ではvar1を新規作成したあと、var2を新規作成してvar1の3倍の数値を格納しています。
変数にラベルとフォーマットを適用する
select mpg_city label="変数1" format=8.3
from sashelp.cars;
変数名の後にformat=フォーマット名およびlabel=”ラベル名”を記述することで、変数にラベルとフォーマットを適用できます。