如何计算出每个 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
已经是日期变量,您可以跳过第一行并继续使用 timestamp
共 ts
.
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").
我想计算同一 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
已经是日期变量,您可以跳过第一行并继续使用 timestamp
共 ts
.
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").