![見出し画像](https://assets.st-note.com/production/uploads/images/94135630/rectangle_large_type_2_03f312b0a8c2f5ec98023842cc340750.png?width=1200)
SASから使うSQL
分析屋のH.Wです。
現在の現場ではSAS内でSQLの使用が原則禁止となっておりますが、使える現場もあり、使用できると便利なので、こんな感じなものがあるという例を出していきます。
基本は通常のSQL通り
・SELECT、UPDATE、INSERT、DELETEなどが使用できますので、これらの記述を残していきます。
SAS上でのSQLの基本構文
proc sql;
※SASではここにSQL文を書きます
quit;
①SELECT
data xxx;
input TRTAN SUBJID $20.;
cards;
1 001
1 002
1 003
2 004
2 005
;
run;
「create table データセット名」 を使うことで、データセットから
条件にあったレコードと変数を新しいデータセットに抽出して出力できます。
・変数の抽出
proc sql noprint;
create table aaa as select TRTAN from xxx;
quit;
これを実行すると、TRTANという変数が 1つ存在するデータセットが作成されます。
![](https://assets.st-note.com/img/1672035625410-cJkTHcFO0Z.png)
・変数名を変更しつつ抽出
proc sql noprint;
create table aaa as select TRTAN as TRTPN from xxx;
quit;
これを実行すると、TRTPNという変数が一つ存在するデータセットが作成されます。
変数名1 as 変数名2 → 変数名1が変数名2に変わって出力されます。
![](https://assets.st-note.com/img/1672035665945-Qd7J7A6p35.jpg)
・マクロ変数cntにデータセットの中のレコード数を入れる
sql noprint;
select count(*) into:cnt from xxx;
quit;
このやり方は集計表の作成で非常に便利なので以前は良く使用しましたが、
現在はSQL禁止の現場のため使用できないのが残念。
②UPDATE
データセットの中身を更新することができます。
条件に当てはまったら値を変えるなどの場合に使用したことはありますが、データの上書きは危険なので、基本的に使用する機会がないかもしれません。
proc sql noprint;
update xxx set SUBJID = "000" where TRTAN = 2;
quit;
このSQL文を実行するとTRTANが2のレコードのSUBJIDに"000"が格納されます。
![](https://assets.st-note.com/img/1672035690677-muxF5kqMga.jpg)
③INSERT
proc sql noprint;
insert into xxx (TRTAN,SUBJID) values (3,"007");
quit;
このSQL文を実行するとTRTAN=3、SUBJID="007"のレコードが、データセットに追加されます。
![](https://assets.st-note.com/img/1672035732683-TrnJ5PGT52.jpg)
こちらの記述でも同じようにレコードの追加ができます。
proc sql noprint;
insert into xxx set TRTAN=3, SUBJID="007";
quit;
④DELETE
DELETEはSAS文だけでも使えますが、SQL文の中でも使用できます。
proc sql noprint;
delete from xxx where TRTAN = 3;
quit;
このSQL文を実行するとTRTAN=3のレコードが削除されます。
proc sql noprint;
delete from xxx;
quit;
このSQL文を実行するとデータセットの中のレコードが全て削除されます。
DELETE文はSASでも十分使えるので、わざわざSQLで使用しなくても問題なさそうです。
⑤proc sqlからquitの間であれば複数の記述ができる
proc sql noprint;
create table aaa as select TRTAN,SUBJID from xxx;
update aaa set SUBJID = "000" where TRTAN = 2;
insert into aaa set TRTAN=3, SUBJID="007";
delete from aaa where TRTAN = 1;
quit;
実行すると以下のような結果になります。
![](https://assets.st-note.com/img/1672035783392-Miu0ybRAv1.jpg)
CROではあまりプログラムが得意でない人も多いみたいで、SQL禁止の現場は結構あるみたいです。
便利な使い方もでき、色々やれるようになった方が作業効率も上がるので、個人的にはたくさん使える機会が増えればと思っています。
終わりに
ここまでご覧いただきありがとうございました!
この記事が少しでも参考になりましたら「スキ」を押していただけると幸いです。
株式会社分析屋について
ホームページはこちら。
noteでの会社紹介記事はこちら。
【データ分析で日本を豊かに】
分析屋はシステム分野・ライフサイエンス分野・マーケティング分野の知見を生かし、多種多様な分野の企業様のデータ分析のご支援をさせていただいております。 「あなたの問題解決をする」をモットーに、お客様の抱える課題にあわせた解析・分析手法を用いて、問題解決へのお手伝いをいたします!
【マーケティング】
マーケティング戦略上の目的に向けて、各種のデータ統合及び加工ならびにPDCAサイクル運用全般を支援や高度なデータ分析技術により複雑な課題解決に向けての分析サービスを提供いたします。
【システム】
アプリケーション開発やデータベース構築、WEBサイト構築、運用保守業務などお客様の問題やご要望に沿ってご支援いたします。
【ライフサイエンス】
機械学習や各種アルゴリズムなどの解析アルゴリズム開発サービスを提供いたします。過去には医療系のバイタルデータを扱った解析が主でしたが、今後はそれらで培った経験・技術を工業など他の分野の企業様の問題解決にも役立てていく方針です。
【SES】
SESサービスも行っております。