授業内容


第5回 データ加工2
<前回の続き>

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は引数(ひきすう)と呼ばれ、入力される値や、変数を表します。それぞれの関数は、引数を入力することでその関数の計算結果を値として返してくれます。

関数

関数

関数の意味

SASでの指定方法

内容

算術関数

ABS

平均値

Y = abs(a,b,c);

a,b,cの平均値を返します

MAX

最大値

Y = max(a,b,c);

a,b,cの最大値を返します

MIN

最小値

Y = min(a,b,c);

a,b,cの最小値を返します

MOD

剰余

Y = mod(a,b);

aをbで割った余りを返します

SIGN

符号

Y = sign(a);

a>0なら1、a<0なら−1、a=0なら0を返します

SQRT

平方根

Y = sqrt(a);

aの平方根を返します

SUM

合計

Y = sum(a,b,c);

a+b+cを返します

数学関数

EXP

指数

Y = exp(a);

eのa乗を返します

LOG

対数

Y = log(a);

eを底とするaの対数を返します

LOG10

自然対数

Y = log10(a);

10を底とするaの対数を返します

丸め関数

INT

切り捨て

Y = int(a);

小数点を切り捨てて整数部を返します
プラスの値を切り上げたいときには"ceil"を使います

ROUND

四捨五入

Y = round(a);

小数点を四捨五入して整数部を返します

 

身長、体重を四捨五入、足のサイズを切り捨てした形で、データを呼びこむプログラムを考えてみましょう。

【新規プログラム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のみを抽出しています。
その他に次のような比較演算子を使うことでも条件付のデータの抽出が可能となります。

比較演算子

演算子

意味

 = または EQ

等しい

 ^= または NE

等しくない

 > または GT

より大きい

 >= または GE

以上

 < または LT

より小さい

 <= または LE

以下

また、「ある条件を満足する場合にこの処理を、満足しない場合には別の処理」をといった命令を実行させるような指定を行う場合には、

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を使いたいという人がいれば、本村まで申し出ること)

いろいろ試行錯誤してみてください。


一つ前の週へ 先頭に戻る 一つ後の週へ


ホーム シラバス 授業計画 授業へのQ&A コンピューター初心者の皆さんへ