【SAS勉強会 -第2回-】SASのPROC FORMAT

f:id:pinkie79:20211001103504p:plain

1.はじめに

みなさん。こんにちは。luckystar_021008です。

ここ最近はずっと引きこもり続けていて、フットサルとかやりたいなと思う今日この頃です。

 

さて、今回もSASに関しての勉強を一緒に行っていきましょう。

前回の記事はこちら👇

blog.css-net.co.jp

 

2.proc formatの利用の仕方

私がみなさんにお伝えする部分はSAS上でのフォーマットの作り方に関してです。

 

フォーマットとは、一言で言うと「読み替え」や「変換」を行うということです。

例えば、「性別」という変数に[1]が入っていた場合に、この[1]が男性なのか女性なのかを予めフォーマットに設定し読み込むことで、出力時に読み替えることができます。

 

では、まず、初めにプログラムの一例を載せてますので、そちらをご確認いただきながら内容の解説をしていきたいと思います。

2-1.プログラムの作成例

f:id:luckystar_021008:20210929180603p:plain

SAS資料210916_001

2-2.フォーマットの作成

「2-1」で表示しているプログラムをそれぞれ確認していきましょう。

2-2-1.libraryとは

f:id:luckystar_021008:20210929180438p:plain

SAS資料210929_001

フォーマットをどこに作成するのかを指定するのに必要となります。

今回の例上では「mylib.catlog」に作成していきます。

「library」を定義せずに作成を進めることも可能となります。定義しない場合は「work.formats」に自動で作成されます。

また、オプションの設定で「cntlout」を利用すれば、データセットへの保持も可能となります。

2-2-2.valueとは

f:id:luckystar_021008:20210929180503p:plain

SAS資料210929_002

フォーマットを作成するときは、それを管理する名前が必要となってきます。

今回の例では「age」という名称で管理を行っています。

ここは作成するときには必須になりますので、きちんと名前を指定してあげましょう。

また、作成時には以下の2点は気を付けてください。

  •  名前の最後は数値を指定できない。(例:age1)
  •  置き換える元の情報が文字列の場合は、先頭に($)を指定してください。(例:$age)

 

f:id:luckystar_021008:20210929180520p:plain

SAS資料210929_003

名前の指定をしてあげたら、次はフォーマットの作成です。

左辺の値の場合、右辺の値で読み替えてください。という記述になっています。今回の例上では[0]から[12]の値は[child]で読み替えると定義しています。

また出力形式を文字列で定義する場合は、引用符で対象の文字列を括る必要があります。

★valueの値の定義に関して

「value」の範囲の指定の仕方は以下が行えます。

  • 24または's'などの単一の値(例:数値の[24]や文字の[s]だけの単一のもの)
  • 0-5などの数値の範囲(例:「0-5:0以上5以下」、「0-<5:0以上5未満」)
  • 'A'-'C'などの引用符で囲まれた文字値の範囲(例:A~Cの文字。A、B、Cが該当)
  • 90,180や'B','D'などのカンマで区切られた一意の値(例:90と180の時、BとDの文字)

 

上記に記載した例は以下のキャプチャでご確認ください。

✓単一文字の例

f:id:luckystar_021008:20210929171844p:plain

SAS資料210929_004

  赤線:フォーマットの定義

  青線:定義変更前のデータ情報

  赤線:定義変更後のデータ情報

 

✓文字列による範囲指定の例

f:id:luckystar_021008:20210929173008p:plain

SAS資料210929_005

  赤線:フォーマットの定義

  青線:定義変更前のデータ情報

  赤線:定義変更後のデータ情報

 

✓文字区切りの例

f:id:luckystar_021008:20210929181057p:plain

SAS資料210929_006

  赤線:フォーマットの定義

  青線:定義変更前のデータ情報

  赤線:定義変更後のデータ情報

2-3.作成したフォーマットを利用する

f:id:luckystar_021008:20210930174557p:plain

SAS資料210929_007

次は、上で作成したフォーマットを利用していきましょう。

今回の例上では27行目に記述があります。

作成したフォーマットを利用するときは、「value」の先頭で定義した名称 + ピリオドが必要です。[例:age.]

上記のように記述を行うと、定義したフォーマットを利用することが可能となります。

★定義したフォーマットの呼び出しに関しての注意点

作成したフォーマットを、所定の場所(※1)以外に格納をした場合は「options fmtsearch=(フォーマット作成先);」で作成したフォーマットの場所を定義しておかなければ、正しくフォーマットを読み込むときに読み替えが行えませんので注意してください。

所定の場所(※1)に格納されているフォーマットであれば不要な作業です。

  

※1.所定の場所:「work.formats」

proc format時にlibraryを利用して自身で指定、もしくは、 libraryを指定せずに作成した時は、「work.formats」に定義内容が格納されます。

⇒workは一時領域を指しています。

2-4.結果の表示

最後に、「2.1」で作成したプログラムをもとに、結果を確認していきましょう。

f:id:luckystar_021008:20210929180141p:plain

SAS資料210916_002

まず、【proc format】を利用してフォーマットを作成しています。

 

f:id:luckystar_021008:20210929175823p:plain

SAS資料210916_003

次に、「mylib.test1」でフォーマットを読み込む前のテーブル情報を表示しています。

キャプチャの通り、この時点ではまだ数値しか入っていません。

 

最後に、フォーマットを読み込んだことにより、「age」という変数には【proc format】で作成した定義に沿って、それぞれ文字列を結果に返していますのでこれで完了という事になります。

3.終わりに

いかがでしたでしょうか?今回のブログを通して、【proc format】に関しての理解が深まるお手伝いが出来ましたら幸いです。

最後までご覧いただき、ありがとうございました。

 

さらに詳しい資料はこちらから。

データ分析の必要性から、CSSが取り組んできたデータ分析の実績や事例までをまとめてご説明します。

marketing.css-net.co.jp