SPSS備忘録 -21ページ目

「DEFINE - !ENDDEFINE」で繰り返し処理をしてみる(3)

11月8日の記事 で「気が向きましたら、実行例をあげてみます。」としてますが、12月5日の記事12月6日の記事 に続き、今日も気が向いたので、マクロの使用例をあげてみます。


12月5日の記事 に、


「()」は!ENDDEFINE.の後に「arg1=!TOKENS(1) 」などのパラメータ値の定義がある場合にこの中に定義を書くのですが、ない場合も「()」だけ残してください。


と、パラメータ値について触れているので、それを使ってみます。


12月5日の記事12月6日の記事 では「性別 地域 幸福」や「!DO !I = 1 !TO 4」など、DEFINEのあとに繰り返す値を定義しておりますが、この値をパラメータ値として保留して別枠で定義することも出来ます。


「C:\Program Files\SPSS\1991 U.S. General Social Survey.sav」を例にして、変数「性別」「人種」「地域」の度数分布表を作るとします。


まぁ、
========シンタックス例1========
FREQUENCIES VARIABLES = 性別 人種 地域.
========シンタックス例1========
で出来てしまうのですが、12月5日の記事 のマクロを使って、


========シンタックス例2========
DEFINE macro ()
性別 人種 地域
!ENDDEFINE.


FREQUENCIES VARIABLES = macro.
========シンタックス例2========
とも書くことが出来ます。


マクロ定義は「DEFINE - !ENDDEFINE.」の間に書くのですが、パラメータ値を用いて「DEFINE - !ENDDEFINE.」の外に書くことが出来ます。このときに「()」にパラメータ値を定義する必要があるわけです。


結論から書くと、
========シンタックス例完成========
DEFINE macro1 (arg1 = !TOKENS(1) / arg2 = !TOKENS(1) / arg3 = !TOKENS(1))
FREQUENCIES VARIABLES = !arg1 !arg2 !arg3.
!ENDDEFINE.


macro1 arg1=性別 arg2=人種 arg3=地域.
========シンタックス例完成========

と書けます(「シンタックス例1」「シンタックス例2」「シンタックス例完成」は出力される内容は同じです)。「DEFINE - !ENDDEFINE.」の間に内容を入れます。「()」の中に登場するパラメータ値をあらかじめ書き出します。文字列の場合はそれぞれ「argX = !TOKENS(1)」と定義し、「X」の数値を変えて複数のパラメータ値を定義できます。


内容のところに「argX」を使ったシンタックスコマンドを記載します。「DEFINE - !ENDDEFINE.」のあとマクロ名を入れます。そのあとに「arg1=性別 arg2=人種 arg3=地域.」 と各パラメータに具体的に入る値を「=」のあとに定義します。


必要に応じてパラメータ値を使ってシンタックスを書いてください。

「DEFINE - !ENDDEFINE」で繰り返し処理をしてみる(2)

11月8日の記事 で「気が向きましたら、実行例をあげてみます。」としてますが、12月5日の記事 に続き今日も気が向いたので、マクロの使用例をあげてみます。


日々のExcelレポートをまとめてSPSSファイル(*.savファイル)にしたい場合があると思います。


データ

単純に1ファイルの変換なら、表示のようなExcelファイル(C:\macrotest\Book1.xls)の場合、
========シンタックス例1========
GET DATA /TYPE=XLS
/FILE='C:\macrotest\Book1.xls'
/SHEET=name 'Sheet1'
/CELLRANGE=full
/READNAMES=off.


SAVE OUTFILE='C:\macrotest\Book1.sav'
/COMPRESSED.
========シンタックス例1========
こんなところでしょうか?。


例えば「C:\macrotest\」というディレクトリに以下のファイルを置き、これをマクロを含むシンタックスを使ってSPSSファイル化したいとします。ちなみにこれらは練習用なので全部上記のBook1.xlsのコピーですが、もちろんそれぞれの全く異なる内容のファイルでも出来ます。


4つのファイル

方法としては「1201・1202・1203・1204」と末尾の数字が増えているので、今回は数値を増やしていくマクロを使ってみます。


今回も「DEFINE - !ENDDEFINE.」を使って繰り返しの処理を設定できます。「DEFINE - !ENDDEFINE.」の書き方としては、
========シンタックス例2========
DEFINE マクロ名 ()
!DO !I = 数値 !TO 数値


内容


!DOEND.
!ENDDEFINE.
マクロ名.
========シンタックス例2========
となります。マクロ単位で名前をつける必要があるので適当な名前をつけてください。「DEFINE - !ENDDEFINE.」同様「!DO - !DOEND.」もセットで、ここには具体的な処理内容を設定します。「!DO !I = 数値 !TO 数値」で数値から数値まで差し替えながら繰り返す処理になります。


内容」のなかで「!I」を使い、「!I」が実際に差し替えていく値になるのですが、これを埋め込む式と結合するのは6月26日の記事 で登場した「CONCAT(文字列1,文字列2,文字列3,・・・)」の変形になります。


マクロ名を「excel」とし、値が変わる下1桁が「1」から「4」、間にもともとのシンタックスを入れて、
========シンタックス例3========
DEFINE excel ()
!DO !I = 1 !TO 4


GET DATA /TYPE=XLS
/FILE='C:\macrotest\Book1.xls'
/SHEET=name 'Sheet1'
/CELLRANGE=full
/READNAMES=off
/ASSUMEDSTRWIDTH=32767.

SAVE OUTFILE='C:\macrotest\Book1.sav'
/COMPRESSED.


!DOEND.
!ENDDEFINE.
excel.
========シンタックス例3========
とします。


「!I」の値を埋め込むために「!CONCAT(文字列1,文字列2,文字列3,・・・)」で加工します。


最終的に「'C:\macrotest\1201.xls'」とするので、「'C:\macrotest\120」「!I」「.xls'」の3つを組み立てます。同様に「'C:\macrotest\1201.xls'」とするので、「'C:\macrotest\120」「!I」「.sav'」の3つを組み立て、以下のようなシンタックスになります。
========シンタックス例完成========
DEFINE excel ()
!DO !I = 1 !TO 4


GET DATA /TYPE=XLS
/FILE=!CONCAT("'C:\macrotest\120",!I, ".xls'")
/SHEET=name 'Sheet1'
/CELLRANGE=full
/READNAMES=off.
SAVE OUTFILE= !CONCAT("'C:\macrotest\120",!I, ".sav'")
/COMPRESSED.


!DOEND.
!ENDDEFINE.
excel.
========シンタックス例完成========


このシンタックスを実行すると1201.xlsから1204.xlsを利用して、1201.savから1204.savが生成されます。



4つのSAVファイル

「DEFINE - !ENDDEFINE」で繰り返し処理をしてみる

11月8日の記事 で「気が向きましたら、実行例をあげてみます。」としてますが、今日は気が向いたので、マクロの使用例をあげてみます。


例えば、
========シンタックス例1========
EXAMINE
VARIABLES= 従属変数 BY 因子
/PLOT BOXPLOT STEMLEAF
/COMPARE GROUP
/STATISTICS DESCRIPTIVES
/CINTERVAL 95
/MISSING LISTWISE
/NOTOTAL.
========シンタックス例1========

というシンタックスで探索的分析を行いたいとします。ダイアログ同様に従属変数と因子変数を設定する必要があるのですが、


従属変数 BY 因子1
従属変数 BY 因子2
従属変数 BY 因子3


というように因子変数を差し替えて同じ処理を繰り返したいとします。


この場合、「DEFINE - !ENDDEFINE.」を使って繰り返しの処理を設定できます。「DEFINE - !ENDDEFINE.」の書き方としては、
========シンタックス例2========
DEFINE マクロ名 ()
内容
!ENDDEFINE.
========シンタックス例2========
となります。マクロ単位で名前をつける必要があるので適当な名前をつけてください。


()」は!ENDDEFINE.の後に「arg1=!TOKENS(1) 」などのパラメータ値の定義がある場合にこの中に定義を書くのですが、ない場合も「()」だけ残してください。


内容については、単純に変数を入れ替える場合は変数名を列挙するだけで結構です。


「C:\Program Files\SPSS\1991 U.S. General Social Survey.sav」のデータで適当に練習する場合、このデータに含まれる変数を列挙し、
========シンタックス例3========
DEFINE inshi ()
性別 地域 幸福
!ENDDEFINE.
========シンタックス例3========
と、設定します。


これをシンタックス例1と結合し、
========シンタックス例4========
DEFINE inshi ()
性別 地域 幸福
!ENDDEFINE.


EXAMINE
VARIABLES= 従属変数 BY 因子
/PLOT BOXPLOT STEMLEAF
/COMPARE GROUP
/STATISTICS DESCRIPTIVES
/CINTERVAL 95
/MISSING LISTWISE
/NOTOTAL.
========シンタックス例4========
とします。


差し替える因子変数にはマクロ名を入れます。
========シンタックス例5========
DEFINE inshi ()
性別 地域 幸福
!ENDDEFINE.


EXAMINE
VARIABLES= 従属変数 BY inshi
/PLOT BOXPLOT STEMLEAF
/COMPARE GROUP
/STATISTICS DESCRIPTIVES
/CINTERVAL 95
/MISSING LISTWISE
/NOTOTAL.
========シンタックス例5========


従属変数に変数を設定します。
========シンタックス例完成========
DEFINE inshi ()
性別 地域 幸福
!ENDDEFINE.


EXAMINE
VARIABLES= 人種 BY inshi
/PLOT BOXPLOT STEMLEAF
/COMPARE GROUP
/STATISTICS DESCRIPTIVES
/CINTERVAL 95
/MISSING LISTWISE
/NOTOTAL.
========シンタックス例完成========

これで完成です。実行すると、


人種 BY 性別
人種 BY 地域
人種 BY 幸福


の探索的分析を行います。