SASでデータを読み込もう!

      2015/06/30

SASでのデータ読み込みは本文に直接記入するか別ファイルで読み込むかです。前回本文に直接入力する方法を紹介しました。

が、直接入力の出番はかなり少ないです。
それはSASがビッグデータを解析するのに特化しているためです。プログラム本体にデータ入力をするとエラーの時にエラーを探すのが手間がかかるなどありますので外部ファイルにデータを作成しましょう!

データファイルを作成しよう

まず、いつものようにATOMを起動しましょう。
(テキストエディタATOMの解説)

ATOMの画像
さぁデータを入力しましょう!!

といきなり言われても困ると思います。では、データの入力の仕方です。

データ入力のフォーマットを決めよう

いきなりプログラムやデータ入力をする前にいらない紙やメモ用紙にデータ入力フォーマットを決めましょう!
データの入力は自分で好きに決めて大丈夫です。自由ですがルールを作っておくと今後のSAS人生が楽になります。
今回は僕のルールを紹介しますので参考にしてください。

例として今回はアンケート調査を集計をSASで統計処理するという例題で説明します。  
アンケートでは  
①年齢  
②性別  
③セガサターン派かプレイステーション派かどうか  
④ドクターペッパーとコーラのどちらが好みか  
⑤どんな時糖分をとりたくなるか(30項目)   
⑥テスト(英語数学国語の三教科)の点数
という項目について行った。  

では、説明していきましょう!
(一応このアンケートは「生活習慣に関するアンケート」という名目です)
まず、データがそれぞれ何桁になるか紙に書きましょう。
年齢は百歳以上もいるかもしれないので三桁にします(明らかに若い世代を対象にするのなら二桁でも良いかもしれません)。
性別は男か女なので一桁にします。
セガサターンかプレイステーションかは、省略形のSS(セガサターン)、PS(プレイステーション)にすることにして二桁にします。
ドクターペッパーかコーラかは同じく省略形でd(ドクターペッパー)、c(コーラ)の一桁にします。
どんな時に糖分をとりたくなるかは例えば「運動の後に糖分を取りたくなる」という質問項目に回答者は1~5段階で回答してもらいます。1はとりたくない、5はとてもとりたいから選択してもらいます。このような質問が30項目です。回答は1~5なので一桁です。
テストは100点満点のテストなので各三桁です。

これに通し番号をいれてためしに一人分データ入力してみましょう。ファイル名はhoge.datとします。

001 021mssd 123451234512345123451234512345 075089045

このようになります。 まとめられるところはまとめて入力スピードを上げましょう!
エクセルのようにひとつひとつスペースやらなんやらいれてるとビッグデータではものすごいロスになります。

こつとして

一人一行

でやるといいと思います。二行以上でも大丈夫ですがデータ修正がちょっとめんどくさいので一行でいきましょう!

欠損値はピリオド(.)で

アンケートだとどうしても記入漏れがあります。その場合は代わりにピリオド(.)を入力しましょう。

ではプログラム本体に作成したhoge.datを読み込ませましょう

data hoge;
infile "/myfolders/hoge.dat";
input (id age sex game water toubun test)($3. +1 3. $1. $2. $1. +1 30*1. +1 3. 3. 3.);

proc print data=hoge;
run;

前回とはinput文が違うのがわかると思います。"input(変数名)(データ);"となります。最初の()で変数を宣言します。次の()でデータを指定します。まず$3.と始まっていますがこれがidの三桁になります。前回でも説明したとおりidは独立変数なので$をつけましょう!そして.を忘れずにしましょう。+1はスペースを意味してます。スペースの時は.はつけないので気をつけましょう。
すこしすすんで30*1.は30項目を一桁で回答という意味です。終わったらちゃんと前()、後()が対応しているかチェックしましょう!!

蛇足

データの数が多くなるとATOMは現在読み込みスピードが遅いので場合によってはデータを分割しておくといいかも!
(正確にはATOMは2メガまでの制限がありますので注意(ただしアップデートで直すと言ってるので期待しましょう))
次回はそうはいってもエクセルでのデータ読み込みからは逃げれない場合が多いのでエクセルでのデータ読み込みです。
(個人的にエクセル嫌いなのでちょっと筆はすすまないw)

 - SAS