Smile Engineering Blog

ジェイエスピーからTipsや技術特集、プロジェクト物語を発信します

SAS備忘録

はじめに

SASについて本人の備忘録もかねてまとめていきます。

SASとは

SAS(Statistical Analysis System)とは、
SAS Institute社が開発したデータ分析やモデルの作成や予測などを行うことができる統計ソフトウェアで医療や通信など幅広い分野で活用されています。

使用するにはSASライセンスを購入する必要がありますが、
無料で使用できる「SAS University Edition」があり個人での非営利的な利用という制限で基本的には誰でも無料で使うことが可能です。
なので、ちょっと勉強でSASを触ってみたい人にはよいかと思います。

SAS University Editionは、以下のダウンロードサイトから取得できます。
仮想環境で動くためVirtualbox等のインストールが必要ですが、そちらもダウンロードサイトから取得できインストール手順も詳しく書かれています。

www.sas.com

無事インストールして起動すると以下の画面が表示されます。
f:id:jspnet:20201115172236p:plain

基礎

SASデータセット

数値や文字列等の値が格納された変数の集団をデータセットと呼ぶ。
データセットは変数名、ラベル等の属性情報と値が格納されてるデータ部で構成されている。
また、データが格納されている各行はオブザベーションと呼ばれる。

f:id:jspnet:20201115191238p:plain

SASプログラムの構成

SASプログラムの構成は、
データセットの読み込みや作成をおこなう「DATAステップ」、
プロシージャとという機能を使ってデータの整列・配置、統計解析の実行やレポート作成などを行う「PROCステップ」、
ライブラリ作成やログ出力制御を記述できる「グローバル・ステートメント」の3つのステップで構成される。

DATAステップ

リスト入力によるデータセット作成

inputステートメントに変数名を指定する。
文字列として読み込む場合は、$を記述する。

data データセット名 ;
    input 変数名1 <$> 変数名2 <$> … ;
cards ;
変数値1 変数値2 ...
変数値1 変数値2 ...
変数値1 変数値2 ...
;
run ;
setステートメントによるデータセットの読み込み

すでにデータセットが存在しそのデータセットを読み込んで新規のデータセットを作成する場合、
setステートメントにデータセット名を指定する。

data 新規作成するデータセット名 ;
    set 読み込むデータセット名 ;
run ;
setステートメントによる縦結合
data データセット名 ;
    set データセット1 データセット2 … ;
run ;

結合するデータセットで同じ変数を持っている場合は、
縦結合するとき同一変数をして扱われる。 どちらかのデータセットにしか存在しない変数の値は欠損値が格納される。

margeステートメントによる横結合
data データセット名 ;
    marge データセット1 データセット2 … ;
    by 変数1(KEY) 変数2(KEY) …;
run ;

margeステートメントで結合する際は、事前に変数(Key)の順番でソートする必要がある。
また、結合するデータセットに同じ変数が存在する場合は後から結合したデータセットの値に上書きされる。

ifステートメントによる絞り込み

ifステートメントで条件のみ記述した場合、サブセット化ifステートメントと呼び、
条件に一致するオブザベーションのみが出力対象となる。

data データセット名 ;
    set データセット ;
    if AGE >= 30 ;
run ;

上記だと30歳以上が出力対象となる。

data データセット名 ;
    marge データセット1(in=IN1) データセット2(in=IN2) ;
    by ID ; 
    if IN1 ;
run;

データセットの後ろに(in=任意の名前)を記述し、絞り込みたいデータセットをifに指定する。
上記の場合データセット1に存在するオブザベーションが出力対象となる。