SPSS 日期时间变量教程

作者:Ruben Geert van den Berg,出自 SPSS 日期与时间变量

本教程展示如何熟练地使用 SPSS 日期时间变量 (Datetime Variables)。你可以下载并打开 hospital.sav 文件,跟随本教程一起操作。

SPSS 数据视图中的日期时间变量

SPSS 主要日期时间函数

本教程将涵盖下表中列出的日期时间函数。由于日期变量 (Date Variables) 和时间变量 (Time Variables) 的值也以秒数存储,因此它们中的大多数也适用于 SPSS 日期变量时间变量

函数 (Function) 用途 (Use) 示例 (Example) 返回值 (Returns)
DATESUM 向日期时间变量添加指定时间单位的数量 DATESUM(datetime,1,‘months’) 时间值 (Time value)
DATEDIFF 计算两个日期时间变量之间以指定时间单位表示的差值 DATEDIFF(datetime1,datetime2,‘hours’) 标准数值 (Standard numeric value)
CTIME 将秒转换为其他时间单位,不进行截断 CTIME.DAYS(timespan) 标准数值 (Standard numeric value)
XDATE 从日期时间变量中提取日期或时间组成部分 XDATE.HOURS(time) 标准数值 (Standard numeric value)
DATE.DMY 从日、月和年创建日期值 DATE.DMY(10,2,2015) 日期值 (Date value)
TIME.HMS 从小时、分钟、秒创建时间值 TIME.HMS(20,15,30) 时间值 (Time value)

SPSS 日期和时间转换为日期时间

首先,我们将 entry_date(入院日期) 和 entry_time(入院时间) 合并为 entry_moment(入院时刻),因为稍后会用到它。下面的 语法 (syntax) 展示了如何使用非常基础的 COMPUTE 命令以及 FORMATS 命令来实现。

***1. 将日期和时间合并为日期时间(以秒为单位)。**
compute entry_moment = entry_date + entry_time.
exe.

***2. 将秒数显示为正常的日期和时间格式。**
formats entry_moment(datetime20).

SPSS DATESUM 函数

SPSS DATESUM 函数向日期时间变量添加指定数量的时间单位(天、小时等等)。指定负数的时间单位进行减法运算。例如,医院工作人员希望在患者出院整整 1 个月后联系他们进行调查。应该在联系患者前 7 天发送通知。

这两个日期时间变量都可以很容易地通过 SPSS DATESUM 函数创建,如下面的语法所示。数据视图 (data view) 中的结果如下面的截图所示。

***1. 计算 contact_date = 出院后 1 个月。**
compute contact_date = datesum(exit_moment,1,'months').
exe.

***2. 将 contact_date 显示为正常的日期和时间格式。**
formats contact_date(datetime20).

***3. 计算 notify_date 为 contact_date 前 7 天。**
compute notify_date = datesum(contact_date,-7,'days').
exe.

***4. 将 notify_date 显示为正常的日期和时间格式。**
formats notify_date (datetime20).

SPSS 日期时间 DATESUM 示例

SPSS DATEDIFF 函数

SPSS DATEDIFF 函数返回两个日期时间值之间以指定时间单位表示的差值(小时、天等等)。例如,患者在医院住了多久?下面的语法首先使用 DATEDIFF 回答这个问题。

请记住,DATEDIFF 会 截断 (truncates) (向下舍入)其返回值。个人而言,我们更喜欢在这里使用基本的减法运算。因为日期时间值是秒数,所以结果也是秒数。但是,我们可以通过为其指定 时间格式 (time format) 来轻松地将这些秒数显示为小时、分钟和秒。如下面的第二个示例所示。

SPSS DATEDIFF 语法示例

***1. 使用 DATEDIFF 计算持续时间(天)。**
compute duration_days = datediff(exit_moment,entry_moment,'days').
exe.

***2. 通过基本减法计算持续时间(秒)。**
compute duration_time = exit_moment - entry_moment.
exe.

***3. 将 duration_time 显示为小时、分钟、秒。**
formats duration_time(time8).

SPSS 日期时间计算持续时间

SPSS CTIME 函数

SPSS CTIME 函数将秒转换为其他时间单位,例如小时、天或月。 奇怪的是,SPSS 中非常缺少 CTIME.YEARS,而 CTIME.SECONDS (基本上什么也不做)却存在。 与 DATEDIFF 相比,返回值不会被截断。

请注意,duration_time 是一个 时间变量 (time variable) ,因此它实际上保存的是秒数。 我们可以使用 CTIME 将这些秒数转换为所需的时间单位,如下面的演示所示;该语法重新计算持续时间(天),但这次不截断结果值。

这里的另一种方法是使用基本的除法; 由于一天包含 86,400 秒,因此将时间值除以 86400 等效于使用 CTIME.DAYS。 如下面的第二个示例所示。

SPSS CTIME 语法示例

***1. 将 duration_time(秒)转换为 duration_day。**
compute duration_days = ctime.days(duration_time).
exe.

***2. 另一种秒到天的转换方法。**
compute duration_days = duration_time / 86400.
exe.

SPSS CTIME 在日期时间上的示例

SPSS XDATE 函数

SPSS XDATE 从日期、时间和日期时间值中提取日期组成部分。 因此,下面的语法展示了如何从 exit_moment(出院时刻) 中提取日、月和年。 请注意,XDATE.MDAY 而不是 XDATE.DAY 返回的是月份中的日。

***从日期时间中用 XDATE 提取日、月和年。**
compute exit_day = xdate.mday(exit_moment).
compute exit_month = xdate.month(exit_moment).
compute exit_year = xdate.year(exit_moment).
exe.

SPSS 日期时间比较

比较两个 SPSS 日期时间变量非常简单,可以使用常见的运算符,例如 >、<= 等。 例如,对于所有访问,exit_moment(出院时刻) 显然必须大于(时间上更晚) entry_moment(入院时刻)。 下面的语法通过使用 IF 命令来确认这适用于所有访问。

SPSS 日期时间比较示例 1

***1. 计算一个只包含零的新变量。**
compute exit_after_entry = 0.

***2. 比较日期时间以检测异常情况。**
if exit_moment > entry_moment exit_after_entry = 1.

***3. 所有个案都被标记,没有异常情况。**
frequencies exit_after_entry.

正如我们之前提到的,日期时间值是秒数。 你可以通过将后者也转换为秒来将日期时间值与给定的日期进行比较。 这可以通过 DATE.DMY 轻松完成,我们稍后会展示。

例如,一份批评医院的报告于 2014 年 11 月 2 日发布。 作为评估其对患者评分影响的第一步,我们将标记所有在此日期或之后结束的访问。 下面的语法中使用的 COMPUTE 命令看起来有点奇怪。 它在 Compute A = B = C 中进行了解释。 请记住,日期值与时间组成部分为 00:00:00 的日期时间值相同。

SPSS 日期时间比较示例 2

***标记所有 exit_moment 在 2014 年 11 月 2 日当天或之后的个案。**
compute after_report = exit_moment > date.dmy(2,11,2014).
exe.

SPSS 日期时间比较示例

该报告于 12:10:05(中午 12 点 10 分 5 秒)发布。 请注意,有两个在发布日期结束但在发布时间之前的访问被标记了。 我们如何排除这些情况?

请记住,SPSS 日期时间值与 SPSS 日期值和 SPSS 时间值的总和相同。 下面的语法使用它来将日期时间变量与给定的日期和时间进行比较

SPSS 日期时间比较示例 3

***标记所有晚于 11 月 2 日下午 12:10:05 出院的个案。**
compute after_report = exit_moment > date.dmy(2,11,2014) + time.hms(12,10,5).
exe.