SPSS 操作符和函数快速概览
作者:Ruben Geert van den Berg,发表于 SPSS Blog
下表提供了 SPSS 中函数和操作符的快速概览,按类型(数值型、字符串型等)排序。 表格下方详细介绍了某些不太常见的函数,并提供了示例。
类型
函数
描述
示例
比较
= (或 EQ)
等于
if(var01 = 0) var02 = 1.
比较
<> (或 NE)
不等于
if(var01 <> 0) var02 = 1.
比较
< (或 LT)
小于
if(var01 < 0) var02 = 1.
比较
<= (或 LE)
至多
if(var01 <= 0) var02 = 1.
比较
> (或 GT)
大于
if(var01 > 0) var02 = 1.
比较
>= (或 GE)
至少
if(var01 >= 0) var02 = 1.
比较
RANGE
在范围内
if(range(score,0,20)) grp01 = 1.
比较
ANY
第一个值是否在第二个、第三个…值之中?
if(any(nation,1,3,5)) flag01 = 1.
逻辑
& (或 AND)
所有参数都为真?
if(sex = 0 & score >= 100) grp01 = 1.
逻辑
| (或 OR)
至少 1 个参数为真?
if(sex = 0 | score <= 90) grp01 = 1.
逻辑
NOT
参数不为真
select if(not(missing(score))).
数值型
+
加法
compute sum01 = var01 + var02.
数值型
-
减法
compute dif01 = var01 - var02.
数值型
*
乘法
compute revenue = sales * price.
数值型
/
除法
compute avg01 = sum01 / trials.
数值型
**
幂运算
compute square01 = var01**2.
数值型
SQRT
平方根
compute root01 = sqrt(var01).
数值型
RND
四舍五入
compute score = rnd(reactime).
数值型
MOD
取模函数 (Modulo Function)
compute cntr = mod(id,4).
数值型
TRUNC
截断
compute score = trunc(reactime).
数值型
ABS
绝对值
compute abs01 = abs(score).
数值型
EXP
指数函数 (Exponential Function)
compute escore = exp(score).
数值型
LN
自然对数
compute lnscore = ln(score).
统计
MIN
变量中的最小值
compute min01 = min(var01 to var10).
统计
MAX
变量中的最大值
compute max01 = max(var01 to var10).
统计
SUM
变量之和
compute total = sum(var01 to var10).
统计
MEAN
变量的平均值
compute m01 = mean(var01 to var10).
统计
MEDIAN
变量的中位数
compute me01 = median(var01 to var10).
统计
VARIANCE
变量的方差
compute vnc01 = variance(var01 to var10).
统计
SD
变量的标准差
compute sd01 = sd(var01 to var10).
缺失值
MISSING
系统或用户缺失值
select if(missing(score)).
缺失值
SYSMIS
系统缺失值
select if(not(sysmis(score))).
缺失值
NMISS
变量中缺失值的数量
compute mis01 = nmiss(v01 to v10).
缺失值
NVALID
变量中有效值的数量
compute val01 = nvalid(v01 to v10).
字符串型
LOWER
转换为小写
compute sku = lower(sku).
字符串型
UPCASE
转换为大写
compute sku = upcase(sku).
字符串型
CHAR.LENGTH
字符串中的字符数
compute len01 = char.length(firstname).
字符串型
CHAR.INDEX
子字符串首次出现的位置
compute pos01 = char.index('banana','a').
字符串型
CHAR.RINDEX
子字符串最后一次出现的位置
compute pos02 = char.rindex('banana','a').
字符串型
CHAR.SUBSTR
提取子字符串
compute firstchar = char.substr(name,1,1).
字符串型
CONCAT
连接字符串
compute name = concat(fname,' ',lname).
字符串型
REPLACE
替换子字符串
compute str01 = replace('dog','g','t').
字符串型
RTRIM
删除字符串右侧的空格
compute str02 = rtrim(str02).
字符串型
LTRIM
删除字符串左侧的空格
compute str03 = ltrim(str03).
日期
DATE.DMY
将日、月、年转换为日期
compute mydate = date.dmy(31,1,2024).
日期
DATEDIFF
计算日期之间的时间差(以选择的时间单位为准)
compute age = datediff(datevar02,datevar01,'years').
日期
DATESUM
向日期添加时间单位
compute followup = datesum(datevar01,100,'days').
日期
XDATE
从日期中提取日期组成部分
compute byear = xdate.year(bdate).
时间
TIME.HMS
将时、分、秒转换为时间
compute time01 = time.hms(17,45,12).
分布
CDF
累积概率分布或密度函数
compute pvalue = cdf.normal(-1.96,0,1).
分布
IDF
逆概率分布或密度函数
compute zvalue95 = idf.normal(.025,0,1).
分布
概率分布或密度函数
compute prob = pdf.binom(0,10,.5).
分布
RV
从指定的概率分布或密度函数中抽取(伪)随机数
compute rand01 = rv.uniform(0,1).
其他
LAG
从前一个个案中检索值
compute prev = lag(varname).
其他
NUMBER
将字符串转换为数值
compute nvar = number(svar,f3).
其他
STRING
将数值转换为字符串
compute svar = string(nvar,f3).
其他
VALUELABEL
将值标签设置为字符串值
compute svar = valuelabel(nvar).
SPSS ANY 函数示例
在 SPSS 中,ANY 函数评估第一个值是否在第二个、第三个…值之中。 例如,假设我们想知道完成日期是否是星期一、星期三 或 星期五? 我们 可以 使用 if(cday = 2 or cday = 4 or cday = 6) flag01 = 1.。 然而,这里一个很好的简写方法是 if(any(cday,2,4,6)) flag01 = 1.。 下面的屏幕截图显示了在 spss-functions.sav 上运行的结果。
IF(ANY(CDAY,2,4,6)) FLAG01 = 1. 的结果。
作为第二个例子,让我们标记所有在最后 5 个变量中至少得一个 1 分的个案。 这通常通过 COUNT 然后 RECODE 来完成,但一个更短的选择是 if(any(1,q1 to q5)) flag02 = 1.,它检查 值 1 是否在 变量 q1 到 q5 中。
SPSS RND 函数示例
在 SPSS 中,您可以将值 x 四舍五入到某个常数 c,默认情况下 c 为 1。 像这样,
RND(123456.789) = 123457
RND(123456.789,10) = 123460 并且
RND(123456.789,.1) = 123456.8.
因此,要将工资四舍五入到美元,您可以使用 compute salary = rnd(salary).。 或者,使用 compute salary = rnd(salary, **.01** ). 将工资四舍五入到美元 分。 要将工资四舍五入到 千 美元,请使用 compute salary = rnd(salary, **1000** ).,如下面的在 spss-functions.sav 上运行的结果所示。
COMPUTE SALARY = RND(SALARY,1000). 的结果。
SPSS MOD 函数示例
在 SPSS 中,MOD 是 取模函数 (modulo function) 的缩写,其中 MOD(X,Y) 返回 X 减去 Y 尽可能多次后的余数。 如果每个受访者都有相同数量的试验,这对于创建试验计数器非常方便,如 compute trial = mod(($casenum - 1),4) + 1. 中所示。 在 spss-functions.sav 上运行时,结果如下所示。
通过 COMPUTE TRIAL = MOD(($CASENUM - 1),4) + 1. 创建的试验计数器。
SPSS TRUNC 函数示例
在 SPSS 中,您可以将值 x 截断(“向下舍入”)到某个常数 c,默认情况下 c 为 1。 像这样,
TRUNC(123456.789) = 123456
TRUNC(123456.789,10) = 123450 并且
TRUNC(123456.789,.1) = 123456.7.
如果每个受访者都有相同数量的试验,则 TRUNC 在创建受访者标识符时非常方便,如 compute respid = trunc(($casenum - 1) / 4) + 1. 中所示。 下面显示了在 spss-functions.sav 上运行的结果。
COMPUTE RESPID = TRUNC(($CASENUM - 1) / 4) + 1. 的结果。
SPSS MEAN 函数示例
在 SPSS 中,MEAN 非常简单明了,但有两件事你应该知道:首先,如果存在任何 缺失值 (missing values),那么
\[mean = \frac{sum(valid\;values)}{number\;of\;valid\;values}\]
这一点很重要,因为有效值的数量可能因受访者而异。
其次,您可以使用 MEAN._k_(...) 将 MEAN 限制为最小数量的有效值 k。 因此,对于 spss-functions.sav,compute m01 = mean.5(q1 to q5). 仅计算在这些 5 个变量上没有任何缺失值的个案的平均分数,如下所示。
COMPUTE M01 = MEAN.5(Q1 TO Q5). 的结果。
SPSS SD 函数示例
在 SPSS 中,SD 计算变量的标准差。 它具有与 MEAN 讨论的相同属性。 SD 在检测 “直线答题者 (straightliners)”(对所有或大多数问题给出相同答案的受访者)时非常方便。 像这样,compute sd01 = sd(q1 to q5). 可以快速完成 spss-functions.sav 的工作。
使用 COMPUTE SD01 = SD(Q1 TO Q5). 检测直线答题者。
SPSS CDF 函数示例
CDF 是 c umulative (probability) d ensity (or distribution) f unction 的缩写:它返回 \[P(X \le x)\],
给定一些 概率密度函数 (probability density function)。 例如,假设 z 服从标准正态分布,z = -2.0 的双尾 p 值是多少? 我们可以通过运行 compute pvalue = 2 * cdf.normal(-2,0,1). 来找到答案,如下所示。
SPSS Compute Pvalue
SPSS IDF 函数示例
IDF 是 i nverse (probability) d ensity (or distribution) f unction 的缩写:它返回某个选定概率的临界值,给定一个密度函数。 请注意,这正是我们计算 置信区间 (confidence intervals) 时所做的事情。 例如:哪个 z 值具有 .025 的累积概率? 我们可以通过 compute zcrit = idf.normal(.025,0,1). 来计算,如下所示。
SPSS Compute Critical Value
SPSS NUMBER 函数示例
在 SPSS 中,NUMBER 将 字符串变量 (string variable) 转换为(新的)数值变量。 关于 spss-functions.sav,compute nage = number(age,f2). 基于包含年龄的字符串变量创建一个数值年龄变量。
COMPUTE NAGE = NUMBER(AGE,F2). 的结果。 请注意案例 11 的非法字符。
重要的是,选择 f2 格式会导致 SPSS 忽略除前 2 个字符以外的所有字符。 如果我们选择 f3 代替,如 compute nage = number(age, **f3** ). 中所示,那么 SPSS 会抛出以下警告:
Warning # 1102
An invalid numeric field has been found. The result has been set to the
system-missing value.
Command line: 117 Current case: 11 Current splitfile group: 1
Field contents: ‘27a’
这是因为案例 11 的年龄包含非法字符,导致系统缺失值。 可悲的是,当使用 ALTER TYPE 转换此变量时,此值会从您的数据中消失,没有任何警告或错误。 在我们看来,这确实是 SPSS 中的一个主要愚蠢之处,而且确实非常棘手。
SPSS VALUELABEL 函数示例
VALUELABEL 函数将某个变量的值标签设置为某个字符串变量的值。 下面的语法说明了如何为 spss-functions.sav 执行此操作。
***DECLARE NEW STRING VARIABLE WITH LENGTH 10.
** string sday(a10).
***SET VALUE LABELS FOR CDAY AS VALUES.
** compute sday = valuelabel(cday).
execute.
结果
COMPUTE SDAY = VALUELABEL(CDAY). 的结果。
最终说明
现在老实说,我们对 SPSS 操作符和函数的概述并非 100% 全面。 我确实省略了一些非常罕见的示例,以至于涵盖它们只会使表格混乱,而不会帮助任何人。
如果您有任何问题或意见,请在下面留言。 除此之外:
感谢阅读!