SAS

Proc sqlを極める(1) ー基本構文、select句ー

proc sqlは同じ処理をデータステップでも実現可能なので、実務上ではそこまで必須というわけではありませんが、今後pythonやSQLといった他言語の習得を考えている人や、もっと効率的に可読性の高いコードを書きたい人は覚えておいて損はないかと思いますので、自分用メモを公開したいと思います。

定義

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=”ラベル名”を記述することで、変数にラベルとフォーマットを適用できます。