2017-01-17 11 views
3

SPSSマクロを初めて使用しています。私はCTablesの生産を自動化するつもりです。 ctablesでは、変数を除いてすべてが同じままです。SPSS CTables via macro

私のコマンドは次のとおりです。

CTABLES 
    /VLABELS VARIABLES=usevar anzahl gesamt F0passthrough DISPLAY=LABEL 
    /TABLE usevar [C][COLPCT.VALIDN '' PCT40.1] + anzahl [C][COUNT '' F40.0] BY gesamt + F0passthrough 
    /SLABELS POSITION=ROW 
    /CATEGORIES VARIABLES=usevar anzahl ORDER=A KEY=VALUE EMPTY=INCLUDE 
    /CATEGORIES VARIABLES=gesamt F0passthrough ORDER=A KEY=VALUE EMPTY=EXCLUDE. 
    filter off. 

usevarは、私はマクロと交換に目指す変数です。

(例えば私の変数は、F5 F6 F7ある)ので、私は試してみました:

DEFINE !usevar() 
F1 F5 
!ENDDEFINE. 

    CTABLES 
    /VLABELS VARIABLES=usevar anzahl gesamt F0passthrough DISPLAY=LABEL 
    /TABLE usevar [C][COLPCT.VALIDN '' PCT40.1] + anzahl [C][COUNT '' F40.0] BY gesamt + F0passthrough 
    /SLABELS POSITION=ROW 
    /CATEGORIES VARIABLES=usevar anzahl ORDER=A KEY=VALUE EMPTY=INCLUDE 
    /CATEGORIES VARIABLES=gesamt F0passthrough ORDER=A KEY=VALUE EMPTY=EXCLUDE. 
    filter off. 

すべてのヘルプははるかに高く評価された - サンプルデータを提供していませんでした。ちょうど正しい方向にヒントが必要です。

答えて

2

まず、 "!usevar"という名前のマクロを定義する場合、構文で "usevar"と同じ名前を使用する必要があります。

とにかく、私はマクロに異なるアプローチを提案:

define !MyCtabMacro (!pos=!cmdend) 
    CTABLES 
    /VLABELS VARIABLES=!1 anzahl gesamt F0passthrough DISPLAY=LABEL 
    /TABLE !1 [C][COLPCT.VALIDN '' PCT40.1] + anzahl [C][COUNT '' F40.0] BY gesamt + F0passthrough 
    /SLABELS POSITION=ROW 
    /CATEGORIES VARIABLES=!1 anzahl ORDER=A KEY=VALUE EMPTY=INCLUDE 
    /CATEGORIES VARIABLES=gesamt F0passthrough ORDER=A KEY=VALUE EMPTY=EXCLUDE. 
    filter off. 
!enddefine. 

今、あなたは、例えば、あなたの変数ごとにテーブルを作成するために、マクロを呼び出すことができます。

!MyCtabMacro F5. 
!MyCtabMacro F6. 

をあなたがしている場合多くの変数に対してこれを行うつもりでは、マクロループをそれらに通すことができます:

define !MyCtabMacro (!pos=!cmdend) 
!do !onevar !in(!1) 
    CTABLES 
    /VLABELS VARIABLES=!onevar anzahl gesamt F0passthrough DISPLAY=LABEL 
    /TABLE !onevar [C][COLPCT.VALIDN '' PCT40.1] + anzahl [C][COUNT '' F40.0] BY gesamt + F0passthrough 
    /SLABELS POSITION=ROW 
    /CATEGORIES VARIABLES=!onevar anzahl ORDER=A KEY=VALUE EMPTY=INCLUDE 
    /CATEGORIES VARIABLES=gesamt F0passthrough ORDER=A KEY=VALUE EMPTY=EXCLUDE. 
    filter off. 
!doend 
!enddefine. 

今すぐt Oマクロを呼び出す:

!MyCtabMacro F5 F6 F7 F8 F9. 

注:「F5 to F9」を使用することはできませんマクロループのために、あなたは私の例のように個別にすべての変数をリストする必要があります。

2

DEFINE/ENDDEFINEのドキュメントガイドは最初は少し怖いかもしれないので、すべての機能を理解するには、最初に例を挙げてお試しください。

私はあなたが間違っている可能性がありますどこの何らかの指示を与えるべき、以下の3つの例を共有する:DEFINE/ENDDEFINE

GET FILE="C:\Program Files\IBM\SPSS\Statistics\24\Samples\English\Employee data.sav". 

/* Example1: Using macro as a global string substitution for variable names */. 
DEFINE !MyMac1() educ jobcat !ENDDEFINE. 
FREQ !MyMac1. 


/* Example2: Having command in the body of macro with variable input as an argument */. 
/* Result: Notice only single FREQ command is run with two variables */. 

DEFINE !MyMac2 (VARS=!CMDEND). 
SET MPRINT ON. 
FREQ !VARS. 
SET MPRINT OFF. 
!ENDDEFINE. 
!MyMac2 vars=educ jobcat. 


/* Example3: Having command in the body of macro with variable input as an argument */ 
/* but looping over each variable */. 
/* Result: Notice two separate FREQ commands are run */. 
/* with one variable each, i.e. looped for each variable */. 

DEFINE !MyMac3 (VARS=!CMDEND). 
SET MPRINT ON. 
!DO !I !IN (!VARS) 
FREQ !i. 
!DOEND 
SET MPRINT OFF. 
!ENDDEFINE. 
!MyMac3 vars=educ jobcat. 

機能は、さまざまな方法で使用することができます。それらのすべての知識を一度構築すると、すぐにマクロをコーディングする方法を特定のスタイルで開発します。初めてSPSSマクロを学習していて、何らかの知識(またはPythonに関心がある)を持っているなら、SPSSマクロを学習する旅を始めるのではなく、このタイプのマクロビルドがはるかに効率的ですfun!)をPythonでコード化する(他の多くの利点の中で)。

+0

例をたくさんありがとう、私は構文とマクロロジックに精通しています。 –