医療統計学を学ぶ大学生のブログ

医療統計学、因果推論を専攻しています。R, SASユーザーです。

SASによる解析:データの作成と表示


norihirosuzuki.hatenablog.com

SASでのプログラミング、解析方法についてまとめていこうと思いますが、例のごとく膨大な量になるので、「SAS」というカテゴリ(ページの右下)でシリーズ化します。 今回は、SASの基本的な使い方、データセットの作成、表示についてまとめていきます。

 

 SASプログラミングをするにあたっては有料版(Ver9.4)ではなく、無料で利用可能なSAS Ondemandを使いますが、プログラミング上の大きな違いはありません。Ondemand版については上の記事に利用までの手順がまとめてあります。

 

 

 SASの概要

SASでの解析は以下の3つの手順で行います。

  1. SASプログラムの作成
  2. SASプログラムの実行
  3. アウトプット(結果)の確認、解釈

具体的なプログラミングについては、各手法の解説記事等で扱います。

SASのプログラムは、データセットの作成・読み込みを行うDATAステップ、解析や処理を行うPROCステップ、オプションの指定やライブラリを作成するグローバルステートメントによって構成されます。

 

また他のプログラミング言語と同じく、以下の方法でコメントをプログラム内に記載可能です。

*コメント;  (*はいくつでも可)

/*コメント*/ (複数行でも可)

個人的には下の方がよく使います。

 

作成したプログラムは、実行したい部分をマウス等で選択した後にメニューのサブミットか、F3キーを押すことで実行がされます。実行結果については、「結果」タブで確認することが出来ます。

 

データ作成

 SASデータセット

データセットは文字変数や数値変数の集まりですが、SASではこのデータセットの各行のことをオブザベーション(OBS)と呼ぶ場合があります。

 

作成方法①リスト入力

リスト入力は、inputステートメントによる作成方法です。inputステートメントでは、変数(列)名を指定し、その変数が文字変数である場合には名前の後に$を付けます。各列に入れるデータははcardsステートメントの後に入力します。この際、変数名やデータはスペース区切りで認識されます。

 

f:id:NorihiroSuzuki:20210506210544p:plain

具体的にはこんな感じ

f:id:NorihiroSuzuki:20210506212212p:plain

 

おまけ

inputステートメントでは、末尾に@@を付け加えることで、同一の行にある入力したデータをそのまま読み込みます。下のコードで作成されるデータセットは先ほどと全く同じものになります。

 

f:id:NorihiroSuzuki:20210506212314p:plain

コードの見やすさによって、この辺りは使い分けてもらえるといいかなと思います。 

 

作成方法②カラム入力

  二つめの方法はカラム入力と呼ばれる、カラム番号(変数の列の場所)を指定するやり方で、先ほどのリスト入力で使ったinputステートメントの部分のコードが少し異なります。カラム入力では、変数名の後にその変数が含まれる列の範囲(Ex, 1-2)指定し、データを読み込みます。

 

f:id:NorihiroSuzuki:20210507104731p:plain

注意点としては、SASでは番号の始まりは1からであること、作成したいデータによってはその変数が含まれる列番号が異なってしまうことです。例えばリスト入力で作成したデータにはGENDERという変数名があり、MaleとFemaleが含まれていますが、Maleの場合はデータ内容の3-6列目、Femaleの場合は3-8列目となっており、指定する番号内には同じ項目のみが含まれるか注意しなければなりません。

 

またカラム入力でも@を使用することが出来ます。通常のカラム入力では、カラム番号を入力したい変数が含まれる範囲(Ex, 3-6)として指定していたわけですが、変数名の前に、@(カラム番号の開始位置)とすることも可能です。

以下の例では、IDは1列目から、GENDERは3列目から、AGEは5列目から、HEIGHTは8列目から読み込んでいます。

 

f:id:NorihiroSuzuki:20210507110613p:plain

 

重ねて言いますが、カラム入力は、読み込む変数の位置(番号)が非常に重要になってくるので、位置が変わっていないかどうかには十分注意をしてください。

 

 

データの表示

作成、読み込みをしたデータセットは、printプロシジャによって表示することが出来ます。また単にデータセットをすべて表示するだけでなく、オプションの指定や、ステートメントを使用することによってさまざまな表示をさせることが出来ます。

 

printプロシジャのオプション

  • firstobs・・・表示する最初の行の指定
  • obs・・・表示する最後の行の指定
  • noobs・・・オブザベーション(行番号)の表示をしない
  • label・・・変数にラベルがある場合に表示する

※firstobs, obsについては、data=(データセット名)の後の()で指定する。具体的には下記の例を参照

ステートメント

  • var・・・表示する変数の指定(スペース区切り)
  • label・・・変数にラベルを割り当てる(変数名=”ラベル名”)

 

以下の例では、リスト入力で作ったデータセットから2-4行目のID、GENDER、HEIGHTの項目だけ抜き出し、またそれぞれにラベルを割り当て表示させています。

・コード

f:id:NorihiroSuzuki:20210507112119p:plain

・結果

f:id:NorihiroSuzuki:20210507112607p:plain

 

 まとめ

実際にはデータを作成するだけでなく、読み込んで作業することが多いかと思うので、次回はライブラリとデータの読み込みあたりを扱っていこうかと思います。

今回の内容はそれほど難しくはないですが、基本中の基本で当たり前のように使うので、初学者の方は自分で色々なデータセットを作ってみたりして遊びつつ、覚えていっていただけるといいかなと思います。