SPSS - returns max(column) 的宏变量
SPSS - Macro variable that returns max(column)
我是 SPSS 宏的初学者,但我找不到任何关于宏变量的通用指南(我显然已经尝试过 Raynald Levesque 的网站)。
所以我正在尝试编写一个宏变量来为我提供一列的最大值。该专栏名为 anmois 这是我写的:
SET MPRINT=yes /PRINTBACK=yes.
DEFINE !max (anmois)
!LET !max = !max(anmois)
!ENDDEFINE.
没用。任何帮助将不胜感激。
谢谢。
- 没有宏函数
!max
所以没有理由假设你的宏会做任何事情。
- 宏函数本身不操作或分析数据 - 它们只创建语法,然后进行操作和分析。
- 您不需要宏来计算列的最大值 - 使用
aggregate
函数。如果您无论如何都想通过宏来完成,请让宏创建聚合函数。
如果您刚开始使用宏,我建议您学习 Python for SPSS。它更强大。您可以从 IBM Predictive Analytics Community 网站下载《Programming and Data Management》一书。它展示了如何将该语言用于典型的 SPSS 任务。所有功能的详细信息也可以在帮助中找到。
宏文档不是很好,但您可以在“定义”下阅读它,并在“帮助”菜单中访问“命令语法参考”的后面部分。
您可以使用旧的 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.
原生 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.
我是 SPSS 宏的初学者,但我找不到任何关于宏变量的通用指南(我显然已经尝试过 Raynald Levesque 的网站)。
所以我正在尝试编写一个宏变量来为我提供一列的最大值。该专栏名为 anmois 这是我写的:
SET MPRINT=yes /PRINTBACK=yes.
DEFINE !max (anmois)
!LET !max = !max(anmois)
!ENDDEFINE.
没用。任何帮助将不胜感激。
谢谢。
- 没有宏函数
!max
所以没有理由假设你的宏会做任何事情。 - 宏函数本身不操作或分析数据 - 它们只创建语法,然后进行操作和分析。
- 您不需要宏来计算列的最大值 - 使用
aggregate
函数。如果您无论如何都想通过宏来完成,请让宏创建聚合函数。
如果您刚开始使用宏,我建议您学习 Python for SPSS。它更强大。您可以从 IBM Predictive Analytics Community 网站下载《Programming and Data Management》一书。它展示了如何将该语言用于典型的 SPSS 任务。所有功能的详细信息也可以在帮助中找到。
宏文档不是很好,但您可以在“定义”下阅读它,并在“帮助”菜单中访问“命令语法参考”的后面部分。
您可以使用旧的 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.
原生 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.