============================================== 多重クロス表データ→コード+頻度生成マクロ x2wedata.sps(v2.0) hori@ec.kagawa-u.ac.jp Keizo Hori 1996.8.27. =============================================== 多重クロス表のデータをSPSSの変数コードと頻度データにするマクロです。 次のようなデータがあるとします。簡単にするため3元クロス表を使って説明 します。実際には制限はありません。何重でもできるようにしています。 --------------------------------------------               国 -----------------------   種   位    britania yahoo --------------------------------------------   1 人  1大臣 3 1       2奴隷 1 3   2馬  1大臣 1 3       2奴隷 3 1 -------------------------------------------- (1)データ窓に次のようにデータが入っています。 x1 x2 3 1 1 3 1 3 3 1 (2)シンタックス窓に次のようにコマンドをいれます。 x2wedata var=x1 x2/evar=shu kurai/nvar=2 2/cvar=kuni. (3)下のマクロを起動したあと、(2)のコマンドを走らせます。 *マクロを起動させる:いくつかの方法があります。 もっともトラブルが少ないの方法。 (a)下のマクロを切り取り、保存しておきます。(x2wedata.sps) (b)それをシンタックス窓に呼び出し (c)すべての範囲を指定し(ctrl+a)、走らせます(ctrl+r)。 (4)次のデータが作成されます。  kuni shu kurai frq 1 1 1 3 1 1 2 1 1 2 1 1 1 2 2 3 2 1 1 1 2 1 2 3 2 2 1 3 2 2 2 1 (5)すでにfrq でウエイトづけされていますので、すぐにクロス表などの分析 ができます。 cross kuni by shu by kurai. ===== 命令 ======================================================================= x2wedata var=現行データ窓にある変数名/evar=行変数名リスト(外から順に) /nvar=行変数のカテゴリ数(外から順に) /cvar=列変数名. ======================================================================= マクロ命令を生かしたのでプログラムは短くなりました。 バグがあればhori@ec.kagawa-u.ac.jp まで連絡ください。 SPSSマクロはエラーチェック機構が弱いのでその点についてはご容赦ください。 *--------------------------------------------------------------. preserve. set printback=off. *-------------------------------------------------------------. * /*x2wedata マクロ for spss. by k.hori(hori@ec.kagawa-u.ac.)2.0.*/ *-------------------------------------------------------------. /* x2wedata var=x1 x2/evar=hito daijin/nvar=2 2/cvar=kuni. */ *var=クロス表データ/evar=行変数名リスト . * /nvar=行一番外変数から順にカテゴリ数. * /cvar=列変数名. * 注意:列変数のカテゴリ数は入れない。 *-------------------------------------------------------------. define x2wedata (var=!charend('/') /* current data */ /evar=!charend('/') /*output var name */ /cvar=!charend('/') /*response var name */ /nvar=!charend('/') ). *------------------------------------------------------------. *****************************************************************. matrix. get x /file=* /variables=!var /missing=omit/sysmis=omit/names=nx. compute nd=ncol(nx). compute n=nrow(x). compute a=make((n+1),1,0). compute na=n. !do !I !in (!nvar). compute a1={0}. compute na1=na. compute na=na/!i. compute nb=n/na1. loop k=1 to nb. loop i=1 to !i. compute da=make(na,1,i). compute a1={a1;da}. end loop. end loop. compute a={a,a1}. !doend. compute a=a(2:nrow(a),2:ncol(a)). compute z={make(n,1,1),a,x(:,1)}. loop i=2 to nd. compute dz={make(n,1,i),a,x(:,i)}. compute z={z;dz}. end loop. save z/outfile=*/var=!cvar !evar frq. end matrix. format !cvar !evar frq(f5.0). weight frq. !enddefine. restore. *--------------------------------------------------------------. x2wedata var=x1 x2/evar= radio solid newspape lecture /cvar=knowled/nvar=2 2 2 2 .