授業内容
2 SASデータセット
2.8 データセットの加工2
前回の所までプログラムが終了していれば、次の形の表が、cmp04.datという名前で、Zドライブ、すなわちネットワークドライブの中のSASというフォルダに記憶してあるはずです。
OBS SAMNO HGHT WGHT FT ATND ALLW
NAME SEX 1 1 157.0 . 24.0 2 . さとみ F 2 2 177.7 76.5 26.0 4 100000
リョウタ M 3 3 156.5 51.0 24.0 4 60000
ai F 4 4 173.0 59.0 27.5 4 30000
bukocha M 5 5 160.0 49.0 24.0 5 2500
kawayasu N 6 6 165.0 53.0 26.5 4 20000
コースケ M
やっと、様々な情報を持つデータが見えてきました。2.3では、演算子によるデータの加工を見てみましたが、ここではその他の方法による、このデータの更なる加工を考えてみましょう。
2.8.1 関数による加工
新しい変数が、元の変数から単純な計算では求められない場合、関数を使って新しいから値を導く必要があります。例えば、四捨五入や切捨てといった処理をする場合には、いかに付けた丸め関数の利用が有効です。また、数値の範囲が対数的に存在する場合(例えばプロ野球選手の給料のように"ピンからキリまで"的な数値の配置になっているときは、対数をとった処理が有効になります。
以下にデータ解析で特に有効だと思われる主な関数のリストをつけておきます。
カッコの中のa,b,cは引数(ひきすう)と呼ばれ、入力される値や、変数を表します。それぞれの関数は、引数を入力することでその関数の計算結果を値として返してくれます。
|
関数の意味 |
|
|
算術関数 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
数学関数 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
丸め関数 |
|
|
|
|
|
|
プラスの値を切り上げたいときには"ceil"を使います |
|
|
|
|
身長、体重を四捨五入、足のサイズを切り捨てした形で、データを呼びこむプログラムを考えてみましょう。
【新規プログラム1】
*データの読み込み;
data cmp05;
infile 'z:\SAS\cmp04.dat';
input samno hght wght ft atnd allw name $ sex $;
*四捨五入と切り捨て;
hght = round(hght);
wght = round(wght);
ft = int(ft);
run;
proc print data = cmp05;
run;
quit;
【新規プログラム1末尾】
このとき出来上がったデータcmp05は、全て整数のデータになっているはずです。
2.8.2 条件による抽出
単純なデータは、ただの数値の寄せ集めです。その中には必要なデータ、不必要なデータが混在しています。統計の処理を行うときには、必要なデータのみとり出すことで処理の効率化を計ることができます。
このデータセットの中から、例えば男性だけのデータを抽出したいとした場合、IFステートメントを使って抽出処理を行うことができます。
【新規プログラム2】
*データの読み込み;
data cmp05;
infile 'z:\SAS\cmp04.dat';
input samno hght wght ft atnd allw name $ sex $;
*男性のみ選択;
if sex = 'M ';
run;
proc print data = cmp05;
run;
quit;
【新規プログラム2末尾】
データステップの中で、
if 条件;
の形で、記入することで、条件を満たさないデータを排除することが可能になります。
上の例では、変数sexの中から、男性を表すMのみを抽出しています。
その他に次のような比較演算子を使うことでも条件付のデータの抽出が可能となります。
|
|
|
|
|
|
|
|
|
|
|
|
|
|
また、「ある条件を満足する場合にこの処理を、満足しない場合には別の処理」をといった命令を実行させるような指定を行う場合には、
IF−THEN/ELSEステートメント
を使います。
IFステートメントの条件が満足されると、THEN以降に書かれたステートメントを実行し、条件が満たされていない場合(その他の場合)には、ELSE以降の命令が実行されます。
ELSEステートメントを省略した場合には、条件式が満たされない場合には、何も実行されないことになります。
【プログラムの形式】
if 条件文 then ステートメント;
else ステートメント;
run;
【プログラム末尾】
具体的な例として、次のような形を考えてみます。上のプログラム2で、性別のデータがMとFのみの2種類のデータであったとしましょう。男性のみを抽出するということは、女性を排除することと同値になるので次のようにプログラムを書くことも可能になります。
【新規プログラム3】
data cmp05;
infile 'z:\SAS\cmp04.dat';
input samno hght wght ft atnd allw name $ sex $;
*女性を排除;
if sex = 'F ' then delete;
run;
proc print data = cmp05;
run;
quit;
【新規プログラム3末尾】
5行目で、「もし性別が女性(F)なら、そのときは、消去(delete)しなさい」というステートメントを使っています。
さらに、条件の絞り込みをおこないたい時は、次のような、
DO ループ
を使うことがあります。
DO ループはEND
によってループが閉じられるまで実行されます。例えば、男性で、しかも足のサイズが26センチ以上の人を選ぶプログラムは次のように書くことができます。
【新規プログラム4】
data cmp05;
infile 'z:\SAS\cmp04.dat';
input samno hght wght ft atnd allw name $ sex $;
*とりあえず男性;
if sex = 'M ' then
do;
*しかも足のサイズ26センチ以上;
if ft>=26;
end;
else delete;
run;
proc print data = cmp05;
run;(自分でも頑張ってみようぜ)
quit;
【新規プログラム4末尾】
もしデータが女性であれば、週に出席回数が3回より多い人を選び、同時に、データが男性の場合には、身長が170センチ以上の人を選んでデータを作るプログラムを組んでメールに添付して提出。出来上がりのデータは一つです。「それぞれ」ではない事に注意(〆切:次回の授業開始前まで。当然加点要素になります。昼休みなどでSASを使いたいという人がいれば、本村まで申し出ること)
いろいろ試行錯誤してみてください。