======================================================= 多重クロス表重み付けデータ→コード生データ生成マクロ w2radata.sps hori@ec.kagawa-u.ac.jp Keizo Hori 1996.8.27. ======================================================== 多重クロス表の重み付けデータをSPSSの生のデータ数だけ変数コードを生成 するマクロです。行列言語では重み付けデータをきちんと処理しません。既存の クロス表データを拙作のマクロ(数量化2類、3類、catdap2)などの処理に便利 です。多重クロス表データ→コード+頻度生成マクロ(x2wedata.sps(v2.0)と一緒 に使うとさらに便利です。 次のようなデータがあるとします。簡単にするため3元クロス表を 使って説明します。実際には特に次元数の限界はありません。 --------------------------------------------               国 -----------------------   種   位    britania yahoo --------------------------------------------   1 人  1大臣 3 1       2奴隷 1 3   2馬  1大臣 1 3       2奴隷 3 1 -------------------------------------------- (1)データ窓に次のようにデータが入っています。  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 (2)シンタックス窓に次のようにコマンドをいれます。 x2radata var=kuni to kurai/weight=kuni. (3)下に添付してあるマクロを起動したあと、(2)のコマンドを走らせます。 *マクロを起動させる:いくつかの方法があります。 もっともトラブルが少ないの方法。 (a)下のマクロを切り取り、保存しておきます。(x2radata.sps) (b)それをシンタックス窓に呼び出し (c)すべての範囲を指定し(ctrl+a)、走らせます(ctrl+r)。 (4)次のデータが作成されます。  kuni shu kurai 1 1 1 1 1 1 1 1 1 1 1 2 1 2 1 1 2 2 1 2 2 1 2 2 2 1 1 2 1 2 2 1 2 2 1 2 2 2 1 2 2 1 2 2 1 2 2 2 命令 ======================================================================= x2radata var=クロス表コード変数リスト/weight=重み付け変数 . ====================================================================== 一つのセルの頻度の最大値は5000にセットしてあります。 set mxloop=5000. ^^^^ の部分を変更すると増やすことができます。 *-------------------------------------------------------------. preserve. set printback=off. *-------------------------------------------------------------. * /* w2radata */ マクロ for spss. by k.hori(hori@ec.kagawa-u.ac.) * 重み付けデータ→生データ生成マクロ 1996.8.27. *--------------------------------------------------------------. define w2radata (var=!charend('/') /* current data */ /weight=!charend('/') ). *----------------------------------------------. /* crossraw var=x1 x2/weight=frq . */ *var=クロス表コード変数/wight=重み付け変数. *-----------------------------------------------. set mxloop=5000. *****************************************************************. matrix. get z /file=* /variables=!weight !var /missing=omit/sysmis=omit/names=nx. compute nvar=ncol(z). compute zz=make(1,(nvar-1),0). loop j=1 to nrow(z). loop k=1 to z(j,1). compute zz={zz;z(j,2:nvar)}. end loop. end loop. compute nx2=nx(1,2:ncol(nx)). save zz(2:nrow(zz),:)/outfile=*/names=nx2 . end matrix. !enddefine. restore. *-----------------------------------------------------. /* w2radata var=knowled to lecture/weight=frq. */