SPSS - 返回max(列)的宏变量

时间:2016-11-24 23:24:05

标签: macros spss

我是SPSS宏的初学者,但我找不到关于宏变量的任何一般指南(我很明显尝试过Raynald Levesque的网站)。

所以我正在尝试编写一个宏变量,它给出了列的最大值。这个专栏名为anmois这是我写的:

    SET MPRINT=yes /PRINTBACK=yes.
    DEFINE !max (anmois)
    !LET !max = !max(anmois)
    !ENDDEFINE.

它不起作用。任何帮助将不胜感激。

感谢。

3 个答案:

答案 0 :(得分:3)

  1. 没有宏功能!max所以没有理由认为你的宏会做任何事情。
  2. 宏功能本身并不操纵或分析数据 - 它们只创建语法,然后进行操作和分析。
  3. 您不需要宏来计算列的最大值 - 使用aggregate函数。如果你想通过宏完成它,让宏创建聚合函数。

答案 1 :(得分:3)

如果你刚开始使用宏,我建议你学习Python for SPSS。它更强大。您可以从IBM Predictive Analytics社区网站下载“编程和数据管理”一书。它显示了如何将该语言用于典型的SPSS任务。所有功能的详细信息也可以在帮助中找到。

宏文档不是很好,但您可以在DEFINE下以及可从“帮助”菜单访问的“命令语法参考”的后续部分中阅读它。

答案 2 :(得分:2)

您可以使用旧的skool Ugly Hack方法或Python来实现此目的。我回应Jons'(JKP)的评论,如果你是第一次学习宏,最好直接跳到Python。

我为以下两种方法提供解决方案。

/* Generate demo data*/.
DATA LIST LIST
/ ID V1.
BEGIN DATA.
1, 4.56
2, 6.85
3, 7.75
END DATA.
DATASET NAME dsDemo.

Native SPSS'Ugly Hack'方法:

/* Using AGGREGATE obtain max value*/.
DATASET DECLARE dsAggMax. 
AGGREGATE OUTFILE=dsAggMax /V1_Max=MAX(V1).


/* Using WRITE OUTFILE generate the appropriate syntax to define max value as a macro variable*/.
DATASET ACTIVATE dsAggMax.
DO IF $CASENUM=1. 
WRITE OUTFILE='C:\Temp\macro var.sps' /  "DEFINE !MyV1Max()", V1_Max (F8.3), " !ENDDEFINE.".
END IF.
EXECUTE.

/* Run the generated syntax file*/.
INSERT FILE='C:\Temp\macro var.sps'.

/*Use the defined macro in whatever context you wish*/.
DATASET ACTIVATE dsDemo.
COMPUTE IsMax_1WrtSyn=V1=!MyV1Max.

Python方法:

BEGIN PROGRAM PYTHON.
import spssdata
#Step1: Get all values in from desired variable V1
s1=spssdata.Spssdata("V1", names=False, convertUserMissing=True, omitmissing=True).fetchall()
print s1 #[(4.56,), (6.85,), (7.75,)]

#Step 2:  Retrieve just the first item holding the data value from each tuple
s2=[i[0] for i in s1]
print s2 #[4.56, 6.85, 7.75] 

#Step 3: Get the maximum value from these values
s3=max(s2)
print s3 #7.75

#Step 4a: Use this maximum value stored in a python variable to execute desired job
spss.Submit("COMPUTE IsMax_2Py=V1=%(s3)s." % locals())

#Alternatively

#Step4b: Create a DEFINE macro variable storing the max value to use outside of python and in native SPSS syntax

spss.SetMacroValue("!MyV1Max_PyGen", s3)
END PROGRAM PYTHON.

/* Use the python generate macro in Step4b outside of python*/.
COMPUTE IsMax_3PyGen=V1=!MyV1Max_PyGen.