授業内容
前回の課題の正答例を書いておきます。
【新規プログラム】
proc iml;
reset print;
/**********************/
/***** テーブル *****/
/* A:10月の売上 */
/* B:11月の売上 */
/* C:価格テーブル */
/**********************/
/**********************/
A = {29 3 104 13,
19 1 78 64,
42 2 100 15};
B = {20 4 98 11,
20 3 82 52,
32 6 100 24};
C = {4800 1000 1480 2000,
4800 1000 1380 1500,
4000 1000 1200 1800};
D = A + B;*2ヶ月の売上個数計;
DSUM = D[+,];*商品ごとの計;
E = D # C;*2ヶ月の各売上額;
ESUM = E[,+];*各支店の売上;
SUMALL = E[+];*3支店計;
quit;
【プログラム末尾】
ただ、このプログラムを実行したとしても、あまり見た目が良いものは出てきません。それはアウトプット画面に出てくる行列に、日本語の説明が付いていないからです。各セルが何を表すのか準備してあげましょう。
siten =
{'天神店','博多店','マリノア'};*支店名;
goods = {'商品1','商品2','商品3','商品4'};*商品名;
SAS/IMLでは、文字データも数値データと同じように扱うことができますが、「'(クォート:shift+7)」で、その両側をくくってあげる必要があります。
この企業の2ヶ月の各商品の売上額で表現してみましょう。ただし、あまりアウトプットに計算が並んでも、見づらいだけなので、必要な所だけプリントの命令を使うようにしましょう。
【新規プログラム】
proc iml;
reset noprint;*アウトプットに計算過程を載せない;
/**********************/
/***** テーブル *****/
/* A:10月の売上 */
/* B:11月の売上 */
/* C:価格テーブル */
/**********************/
/**********************/
A = {29 3 104 13,
19 1 78 64,
42 2 100 15};
B = {20 4 98 11,
20 3 82 52,
32 6 100 24};
C = {4800 1000 1480 2000,
4800 1000 1380 1500,
4000 1000 1200 1800};
D = A + B;*2ヶ月の売上個数計;
DSUM = D[+,];*商品ごとの計(奇数課題);
E = D # C;*2ヶ月の各売上額;
/******** 以下が追加部分 *********/
SITEN = {'天神店','博多店','マリノア'};*支店名;
GOODS = {'商品1','商品2','商品3','商品4'};*商品名;
MATTRIB E rowname = SITEN
colname = GOODS
label = '2ヶ月の各売上額'
format = 10.0;*文字数を10に設定;
print E;
quit;
【プログラム末尾】
ここで、行列に名前を入れるのに、MATTRIBステートメントを使っています。これは、MATRIX(行列)のATTRIBUTION(特性)を表すステートメントです。そこで、rowname(行の名前)とcolname(列の名前)を指定してあげて、その表をlabel(これはそのままラベルですね)によって、『2ヶ月の各売上額』と名前を付けてあげています。formatは、文字の桁数を指定しています。10.0で10桁の数、小数点以下を0桁で設定するという意味になります。
2ヶ月の売上額 商品1 商品2 商品3 商品4 支店計 天神店 235200 7000 298960 48000 589160 博多店 187200 4000 220800 174000 586000 マリノア 296000 8000 240000 70200 614200 商品計 718400 19000 759760 292200 1789360