================================== SPSSダミーコード生成マクロ dcode.sps by K.Hori hori@ec.kagawa-u.ac.jp last modified 1996.8.8. ================================== アイテムカテゴリ名生成マクロの応用として、ダミーコード生成マクロを作り ました。 (1)行列言語を使っているので Advancee statistics が必要です。 (2)とりあえず走らせるには、  (a)下のマクロと追加部分をSPSSシンタックス窓に読み込む。  (b)全範囲を指定する。(反転させる)  (c)実行させる。 a1 a2 a3 のダミーコードを生成します。 (3)dcode var=a1 a2 a3/ncat=3 4 2.   ^^^^^^^^ ^^^^^ ダミーコード その変数のカテゴリー数 に変換する変数 (4)カテゴリーは1からカテゴリー数指定した数までをダミーコードにかえま す。<ncat= >では変数の数だけカテゴリー数を指定して下さい。 (5)変数名はSPSSの省略表現も可能です。 (6)変数の数とカテゴリー数の数があっているかのチェックはしていません。 自分で確認して下さい。(エラーチェックしても処理が大変) (7)ダミー変数はデータ窓の最初に作られます。format(f2.0)です。 ダミー変数の名前は 第1変数から d1_1 d1_2 d1_3 d2_1 d2_2というふうに作られます。 ------------- 使用方法 ------------- (1)下のdcode.sps がdcode マクロです。これを切り取って、dcode.sps として保存します。 (2)spss を起動し、シンタックス窓にdcode.sps を読み込む。 (3)dcode.sps を全範囲指定(ctrl+A)し、走らせる(ctrl+r)。 (4)前もってでもいいし、あとからでもいいですが、ダミーコードを作りたい 変数のデータをデータ窓に入れる。 (5)dcode var=a1 a2 a3/ncat=3 4 2.  のように、変数名とカテゴリ数を指定しる。(シンタックス窓に書く) (6)これを走らせる(カーソルをそこにもっていきctrl+r)。 -------------------------------------------------------- とりあえず走らせてみるには(4)からあとの部分は下の実験用プログラムを シンタックス窓に読み込んで、すべてを指定し、走らせてください。 -------------------------------------------------------- バグ等があれば堀 啓造(hori@ec.kagawa-u.ac.jp)に連絡してください。 免責:このプログラムを使っていかなるトラブルが生じても責任は持ちません。 *dcode.sps-------------------------------------------. /* SPSSダミーコード生成マクロ 要advanced statistics*/. /* k.hori(hori@ec.kagawa-u.ac.jp) 1996.8.8. last modified */ preserve. set printback=none. define dcode (var= !default(0)!charend('/') /ncat = !default(no)!charend('/')). /* dcode var=a1 a2 a3/ncat=3 4 2. */ * ^^^^各変数のカテゴリー数. matrix. compute num={1,2,3,4,5,6,7,8,9,10,11,12,13,14,15}. compute num=t(num). get x /file=* /var=!var/missing=0 /names=nx. compute nsample=nrow(x). *カテゴリの1,0展開 結果を z に. compute z=x(:,1). compute j=0. !do !i !in(!ncat). compute j=j+1. compute x1=x(:,j). compute x1={num(1:!i,1);x1}. compute d=design(x1). compute #row1=nsample+!i . compute d=d((!i+1):#row1,1:!i). compute z={z,d}. !doend. print z. *カテゴリ総数 ctotal. compute ctotal=ncol(z)-1. compute x=z(:,2:(ctotal+1)). *変数名作成. !let !vx=''. compute colname={'1'}. compute varname={'1'}. !do !i !in(!ncat). !let !vx=!concat(!vx,'x'). !let !nvx=!length(!vx). !let !varnam0=!concat('d',!nvx). !let !varnam0=!quote(!varnam0). compute varname={varname,!varnam0}. !do !j= 1 !to !i. !let !vname=!concat('d',!nvx,'_',!j). !let !vname2=!quote(!vname). compute colname={colname,!vname2 }. !doend. !doend. compute varname=varname(1,2:ncol(varname)). print {varname;nx}/format=a8/title='変数名対応表'. compute cname=colname(1,2:(ctotal+1)). save x/outfile='dcode_.sav'/names=cname. end matrix. match files file="dcode_.sav"/file=*/map. format d1_1 to !vname (f2.0). exec. erase file="dcode_.sav". exec. !enddefine. restore. *-------------------------. * dcode macro はここまで. *-------------------------. *実験用プログラム. DATA LIST /NUM A1 A2 A3 A4 A5 A6 A7 1-16. BEGIN DATA 1 1 1 1 2 1 210 2 1 3 2 1 2 1 8 3 2 1 1 1 1 518 4 3 4 2 2 2 630 5 1 4 1 1 1 315 6 2 3 2 2 2 212 7 2 1 1 1 1 622 8 1 3 1 2 2 312 9 3 2 2 2 3 525 10 1 1 2 1 2 2 8 11 3 1 1 1 31020 12 2 3 1 2 1 410 13 2 1 2 2 2 314 14 1 3 2 2 1 1 6 15 3 2 1 1 3 928 16 2 4 1 1 310 8 17 1 2 2 1 1 310 18 2 1 2 1 3 425 19 3 1 1 2 1 628 20 2 2 1 1 2 628 END DATA. *--------------------------------------. dcode ivar=a1 a2 a3/ncat=3 4 2. *--------------------------------------.