こんにちは、DXCEL WAVEの運営者(@dxcelwave)です!
- SASプログラムの開発環境でSQLを実行する方法が知りたい。
- SASプログラム内にSQLのSELECT文を記述し、データ参照・集計する方法が知りたい。
【SAS実践】SQL SELECT文とデータ参照
SASの開発環境にSQLを記述し、データを抽出する方法について解説していきます。
後続では、以下に示すtest_db
というサンプルデータセットを用いてSASプログラムを実行します。SASプログラムの先頭に以下のコードを貼り付けておきましょう。
コード
/*
================================================
SQLサンプルデータを準備
================================================
*/
data test_db;
input id$ product$ price store$ date date9.;
datalines;
1000 apple 100 TOKYO 4Mar1985
1001 orange 250 TOKYO 4Mar1985
1002 lemon 300 OSAKA 4Mar1985
1003 grape 400 OSAKA 4Mar1985
;
run;
出力イメージ
id product price store date date
1000 apple 100 TOKYO 9194 04MAR1985
1001 orange 250 TOKYO 9194 04MAR1985
1002 lemon 300 OSAKA 9194 04MAR1985
1003 grape 400 OSAKA 9194 04MAR1985
SELECT文のひな型
SASプログラム内でSQLを実行するには、PROC SQL
〜QUIT
というステートメントを用いて、次のように記述します。
コード
/*
================================================
SELECT文でデータ取得
================================================
*/
PROC SQL;
SELECT *
FROM test_db;
QUIT;
出力イメージ
id product price store date
1000 apple 100 TOKYO 9194
1001 orange 250 TOKYO 9194
1002 lemon 300 OSAKA 9194
1003 grape 400 OSAKA 9194
カラムの指定
指定したカラムのデータのみ抽出したい場合、次のように記述します。
抽出の際にデータ型のフォーマットを指定したい場合(例:dateというカラムをdate型で出力したい)、対象カラムの直後にformat
を指定すると良いです。
コード
/*
================================================
SELECT文でデータ取得
================================================
*/
PROC SQL;
SELECT id, product, date format=date9.
FROM test_db;
QUIT;
出力イメージ
id product date
1000 apple 04MAR1985
1001 orange 04MAR1985
1002 lemon 04MAR1985
1003 grape 04MAR1985
出力件数を指定
出力するレコード件数を指定したい場合、OUTOBS
を用いて次のように記述します。
コード
/*
================================================
SELECT文でデータ取得
================================================
*/
PROC SQL OUTOBS=1;
SELECT *
FROM test_db;
QUIT;
出力イメージ
id product price store date
1000 apple 100 TOKYO 9194
Where句による条件抽出
特定の条件を満たすレコードのみを抽出したい場合はWhere
句を用いて次のように記述します。
コード
/*
================================================
SELECT文でデータ取得
================================================
*/
PROC SQL;
SELECT *, date format=date9.
FROM test_db
WHERE (product EQ 'apple') OR
(price GT 300) OR
(STORE IN ("OSAKA"));
;
QUIT;
出力イメージ
id product price store date date
1000 apple 100 TOKYO 9194 04MAR1985
1002 lemon 300 OSAKA 9194 04MAR1985
1003 grape 400 OSAKA 9194 04MAR1985
Where句で用いる不等号
Where句指定の際によく利用する抽出条件も併せて記載します。
条件文 | 概要 |
---|---|
EQ | 等しい(=) |
GT | より大きい(>) |
GE | 以上(>=) |
LE | 以下(<=) |
IN | 含む |
LIKE | 含む(文字列) |
【SAS実践】SQL SELECT文とデータ集計
続いて、SAS開発環境でSQLを用いてデータを集計する方法について解説します。
後続では、以下に示すtest_db
というサンプルデータセットを用いてSASプログラムを実行します。SASプログラムの先頭に以下のコードを貼り付けておきましょう。
コード
/*
================================================
SQLサンプルデータを準備
================================================
*/
data test_db;
input id$ product$ price store$ date date9.;
datalines;
1000 apple 100 TOKYO 4Mar1985
1001 orange 250 TOKYO 4Mar1985
1002 lemon 300 OSAKA 4Mar1985
1003 grape 400 OSAKA 4Mar1985
;
run;
出力イメージ
id product price store date date
1000 apple 100 TOKYO 9194 04MAR1985
1001 orange 250 TOKYO 9194 04MAR1985
1002 lemon 300 OSAKA 9194 04MAR1985
1003 grape 400 OSAKA 9194 04MAR1985
集計|合計・平均・最大・最小値
指定したカラムの合計値・平均値・最大値・最小値をそれぞれ集計したい場合、次のように記述します。
コード
/*
================================================
SELECT文でデータ集計
================================================
*/
PROC SQL;
SELECT "集計結果" as title,
sum(price) as total,
avg(price) as average,
min(price) as min,
max(price) as max
FROM test_db;
QUIT;
出力イメージ
title total average min max
集計結果 1050 262.5 100 400
グループ集計|Group By
前述の集計結果をグループ別に集計したい場合、次のように記載します。
コード
/*
================================================
SELECT文でデータ集計
================================================
/* */
PROC SQL;
SELECT store,
sum(price) as total,
avg(price) as average,
min(price) as min,
max(price) as max
FROM test_db
GROUP BY store;
QUIT;
出力イメージ
store total average min max
OSAKA 700 350 300 400
TOKYO 350 175 100 250
【参考】SASプログラミング記事一覧
当サイトではSASを用いたプログラミング解説記事を多数掲載しております。
SASはデータ処理・分析をはじめ、高度な統計解析や機械学習・AIによる予測モデリングなど様々な用途に利用できます。また金融や医療を代表とする様々な業界の分析業務で広く活用されています。
最後に
お問い合わせフォーム
上記課題に向けてご気軽にご相談下さい。
お問い合わせはこちら