如何计算出每个 ID SPSS 与第一个时间戳的时间差

How to work out time difference from first timestamp for each ID SPSS

我想计算同一 ID 的每一行的第一个时间戳的时间差(以月为单位)。

例如,我的数据目前看起来类似于:

ID TimeStamp 

1 01-Jan-21

1 26-Apr-21

2 03-Jan-21

2 26-May-21

2 26-Oct-21

3 04-Jan-21

3 18-Mar-21

我希望它看起来像这样:

ID TimeStamp MonthSince1st

1 01-Jan-21 .

1 26-Apr-21 3

2 03-Jan-21 .

2 26-May-21 4

2 26-Oct-21 9

3 04-Jan-21 .

3 18-Mar-21 2

我该怎么办?

此代码首先确保我们使用的是日期变量而不是字符串 - 如果 timestamp 已经是日期变量,您可以跳过第一行并继续使用 timestampts.

compute ts=number(timestamp, DATE9).
formats ts (DATE9).

聚合命令会将第一个时间戳添加到 ID 的所有行。 然后我们可以计算每一行中的时间戳与该 ID 的第一个时间戳之间的差异。

aggregate outfile=* mode=addvariables /break=id /startdate=min(ts).
compute MonthsFromStart=DATEDIF(ts, startdate, "months").

如果您希望在该 ID 的第一行中使用缺失值而不是 0,请使用此值代替第二行:

sort cases by id ts.
if id=lag(id) MonthsFromStart=DATEDIF(ts, startdate, "months").