授業内容


第23回(第10回) IMLプログラミング2 12/22
23 IMLプログラミング2
行列からの新しいSASデータセットの作成

第21回で作成した相関行列を、新たなSASデータセットとして保存してみましょう。
行列からSASデータセットを作る場合、CREATEステートメントとAPPENDステートメントを使用します。行列の列がデータセットの変数になり、行がオブザベーションになります。

 

指定方法

CREATE SASデータセット名 FROM 行列名;
<[COLNAME=列の名前  ROWNAME=行の名前]>

APPEND FROM 行列名;

 

新規に作成する(CREATE)データセット名と、それをどの行列から(FROM)作るかを、まず指定します。オプションとしてその際、列の名前をデータセットの変数名として指定することと、行の名前を行のタイトルとして追加することが出来ます。
さらに、APPENDステートメントを使って、オブザベーションを指定してあげます。もし、APPENDステートメントを除くと、オブザベーションが設定されないことになります。

 

【新規プログラム】
data cp00;
infile 'z:\base01FF.prn';
input samno hght wght ft atnd allw pname $ sex $ pc word xl mail;
run;

proc iml;
reset noprint;
use cp00;
read all var {hght,wght,ft} into x;
close cp00;

n = nrow(x);
sum = x[+,];
xpx =t(x) * x - t(sum) * sum/n;
s = diag(1/sqrt(vecdiag(xpx)));
corr = s * xpx * s;

/****ここからが追加プログラム****/
names = {'hght','wght','ft'};
create corrdata from corr[colname = names];
append from corr;
show datasets;
show contents;
close corrdata;
proc print data = corrdata;

/************ここまで************/
quit;
【プログラム末尾】

通常、IMLでは数値型の行列か、文字型の行列かどちらか一つで計算を行います。これを、追加プログラムの部分を次の形に置き換えてあげると、表頭と表側にどちらもnamesで指定した名前が入ることになり、数値型と文字型の行列を一つのデータセットにすることが出来ます。

/********追加プログラム2********/
names = {'hght','wght','ft'};
create corr2 from corr[colname = names rowname = names];
append from corr[rowname = names];
show datasets;
show contents;
close corr2;
proc print data = corr2;
/************ここまで************/


今週の課題

データセットbase01FF.prnを使って、次の操作を行ってください。

(1)名前(pname)を読み込んだ行列NAMEを作る。

(2)身長(hght)、体重(wght)、足のサイズ(ft)を読み込んだデータBODYSを作ってください。

(3)行列NAMEと行列BODYSをデータとして持つ、新しいデータセットBODYINFOを作ってください。

(4)行列BODYSの情報から、それぞれの変数のデータ件数、平均、最小値、最大値を求めて、一つの行列STATを作ってください。

 

ヒント1)
行列STATを作る際に、データ件数を行列で表示する必要がありますが、J関数を使うと便利です。
J(ncol , 1 , nrow);:ただし、ncol、nrowはそれぞれBODYSの列数、行数をカウントさせて入れてください。
これは、「ncol行1列の行列を作ってその要素の値としてnrowを入れる」と言う意味です。
行列BODYSの行(row)の数を求めるには次のように書きます。
nrow = nrow(BODYS);
列(column)も同様に考えてみてください。IML関数一覧

J関数の使い方例
proc iml;
j=j(1,2,3);
print j;
quit;

ヒント2)
行列STATを作るとき、データ件数、平均、最小値、最大値のそれぞれの行列を作って、合体させれば簡単です(平均等のとり方は、第19回あたりを見れば多分わかります)。


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


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