SPSS 时间变量教程
作者:Ruben Geert van den Berg,原文链接:SPSS Date & Time Variables
在您对 SPSS 的时间变量有了扎实的理解之后,您可能会发现对它们进行计算非常容易。本教程将演示 SPSS 的主要时间函数。此外,我们还会展示很多时候我们甚至不需要使用这些函数也能完成任务。
在本教程中,请记住 SPSS 的时间变量包含以秒为单位的时间跨度,这些时间跨度可能表示也可能不表示时钟时间。其次,时间变量是数值变量,因此所有数值函数都可以应用于它们。
我们鼓励您亲自尝试我们将要演示的时间计算。您可以通过下载并打开 clock_card.sav 来做到这一点。
SPSS 主要时间函数
SPSS 的大多数日期函数也适用于时间变量。在下面的表格中概述它们之后,我们将在本教程的其余部分更详细地了解它们。
函数 (Function) | 用途 (Use) | 示例 (Example) | 返回值 (Returns) |
---|---|---|---|
DATEDIFF |
计算两个时间之间的差,以给定的时间单位表示 | DATEDIFF(time1,time2,'minutes') |
标准数值 (Standard numeric value) |
DATESUM |
将给定的时间单位数添加到时间变量 | DATESUM(time,8,'hours') |
时间值 (Time value) |
XDATE |
从时间变量中提取时间分量 | XDATE.HOURS(time) |
标准数值 (Standard numeric value) |
TIME.HMS |
从小时、分钟、秒创建时间值 | TIME.HMS(20,15,30) |
时间值 (Time value) |
SPSS DATEDIFF
函数
我们的数据包含员工使用打卡机记录的进入和退出时间。我们首先想知道他每天在办公室花了多少时间。 下面的 语法 (syntax) 展示了如何使用和不使用 DATEDIFF
来做到这一点。 屏幕截图显示了两个选项的结果。
SPSS DATEDIFF
语法示例
***1. 计算以秒为单位的持续时间 (Compute duration in seconds)。**
compute duration_time = exit - entry.
exe.
***2. 以时间格式显示以秒为单位的持续时间 (Display duration in seconds as time)。**
formats duration_time(time8).
***3. 使用 DATEDIFF 计算以分钟为单位的持续时间 (Compute duration in minutes with DATEDIFF)。**
compute duration_minutes = datediff(exit,entry,'minutes').
exe.
***4. 隐藏小数位 (Hide decimals)。**
formats duration_minutes(f3).
SPSS DATESUM
函数
员工应该每天在办公室工作 8 小时。 也就是说,他们的进入时间应该是他们的退出时间减去 8 小时。 这种时间的减法(或加法)很容易通过使用 DATESUM
来完成。 然而,意识到小时由 3600 秒组成,我们可以通过普通的加法获得相同的结果,如第二个例子所示。
SPSS DATESUM
语法示例
***1. 计算目标进入时间 (entry_target)(离开前 8 小时),以秒为单位 (Compute entry_target (8 hours before leaving) in seconds)。**
compute entry_target = datesum(exit,-8,'hours').
exe.
***2. 以时间格式显示目标进入时间 (Display entry_target as time)。**
formats entry_target(time8).
***3. 用于计算目标退出时间 (exit_target)(进入后 8 小时)的 DATESUM 的替代方法 (Alternative to datesum for exit_target (8 hours after entry))。**
compute exit_target = entry + 3600 * 8.
exe.
***4. 以时间格式显示目标退出时间 (Display exit_target as time)。**
formats exit_target(time8).
SPSS XDATE
函数
员工应该在上午 10 点之前到达。 一种标记迟到条目的方法是使用 XDATE
从进入时间中提取小时数。 XDATE
需要加上我们希望提取的时间单位作为后缀,例如 XDATE.HOURS
。 最后,我们将使用 RECODE 将小时数重新编码为我们的标志变量。
SPSS XDATE
语法示例
***1. 从进入时间中提取小时数 (Extract hours from entry)。**
compute entry_hours = xdate.hours(entry).
exe.
***2. 标记进入时间 >= 10 的情况(迟到)(Flag cases where entry_hours >= 10 (late entry))。**
recode entry_hours(lo thru 9 = 0)(10 thru hi = 1) into late_entry.
exe.
SPSS TIME.HMS
函数
SPSS 时间变量保存秒数。 TIME.HMS
将小时、分钟和秒转换为秒数,因此可以从正常的时间分量创建 SPSS 时间值。
分钟和秒是可选的; 如果省略,它们将默认为零。 也就是说,TIME.HMS(10)
是 TIME.HMS(10,0,0)
的简写形式,并返回 36,000(秒)。 我们可以通过将其格式设置为 TIME8
来将此值显示为 10:00:00。
下面的语法使用 TIME.HMS
作为标记迟到条目的另一种方式。
SPSS TIME.HMS
语法示例
***1. 计算截止进入时间 (entry_cutoff) 为上午 10 点 (Compute entry_cutoff as 10 AM)。**
compute entry_cutoff = time.hms(10,0,0).
exe.
***2. 以时间格式显示截止进入时间 (Display entry_cutoff as time)。**
formats entry_cutoff(time8).
***3. 在重新计算 `late_entry` 之前删除它 (Delete late_entry before recalculating it)。**
delete variables late_entry.
***4. 重新计算 `late_entry` (Recalculate late_entry)。**
if entry < entry_cutoff late_entry = 0.
if entry >= entry_cutoff late_entry = 1.
exe.
SPSS 时间比较
当我们意识到 SPSS 时间值只是以小时、分钟和秒显示的秒数时,SPSS 时间比较就非常简单了。 要将 SPSS 时间值与正常时间值(小时、分钟和秒)进行比较,只需将后者转换为秒。 TIME.HMS 正是做到了这一点。 接下来,只需使用 SPSS 的标准运算符,如 >、<= 等。
例如,员工不应在下午 4 点之前离开。 下面的语法显示了一个用于标记提早离开的超级简写。 不寻常的 COMPUTE
命令在 Compute A = B = C 中进行了解释。
SPSS 时间比较语法示例 1
***用于标记提早离开(下午 4 点之前)的超级简写 (Super shorthand for flagging early exits (before 4 PM))。**
compute early_exit = exit < time.hms(16).
exe.
SPSS 时间比较示例 2
因为 TIME.HMS
是一个函数,所以它可以被替换到其他函数中,特别是 RANGE。 以下示例显示了如何使用它来标记高峰时段的进入时间(从上午 8 点到 9 点)。
***使用 RANGE 标记上午 8 点到 9 点之间的进入时间 (Flag entry times between 8 and 9 with RANGE)。**
compute rush_hour_entry = range(entry,time.hms(8),time.hms(9)).
exe.
AGGREGATE
中的 SPSS 时间变量
这个最后的例子再次强调 SPSS 时间变量是数值变量,保存秒数,可以对其使用正常的数值函数。
例如,员工应该每周工作 40 小时。 我们的数据在多大程度上满足了这一标准? 我们已经计算了 duration_time
,这是一个保存秒数的时间变量。 我们可以简单地使用 AGGREGATE 每周对其求和。 这会产生每周的秒数,我们将通过将其格式设置为 TIME8
来将其显示为正常时间。
***1. 计算每周在办公室的秒数 (Compute seconds in the office per week)。**
aggregate outfile *
/break week
/week_hours = sum(duration_time).
***2. 将秒数显示为小时、分钟、秒 (Show seconds as hours, minutes, seconds)。**
formats week_hours(time8).