SPSS 滞后函数
SPSS LAG Function
我有一个这样的 SPSS 数据集,我想在其中确定后续日期是否是给定 ID 的前一个日期的 "duplicate":
ID CorrDate
39 07/24/2017
39 07/25/2017
39 07/27/2017
39 07/27/2017
91 03/01/2017
99 07/04/2017
999 02/22/2017
999 02/22/2017
999 02/22/2017
999 02/22/2017
我在 SPSS 中尝试了以下 LAG 函数:
SORT CASES BY ID(A) CorrDate(A).
IF (ID=LAG(ID) AND CorrDate ne LAG(CorrDate)) Duplicate = 0.
EXECUTE.
IF (ID=LAG(ID) AND CorrDate eq LAG(CorrDate)) Duplicate = 1.
EXECUTE.
然而,这似乎没有产生准确的结果,所以我尝试了以下命令,看看是否可以确定问题的根源:
COMPUTE PreviousID=LAG(ID).
COMPUTE PreviousDate=LAG(CorrDate).
EXECUTE.
IF (ID=PreviousID) AND (CorrDate~=PreviousDate) Duplicate = 0.
EXECUTE.
IF (ID=PreviousID) AND (CorrDate=PreviousDate) Duplicate = 1.
EXECUTE.
两者都产生了以下输出,似乎没有正确识别 ID #39 和 999 的重复项:
ID PreviousID CorrDate PreviousDate Duplicate
39 39 07/24/2017 07/23/2017 0
39 39 07/25/2017 07/24/2017 0
39 39 07/27/2017 07/25/2017 0
39 39 07/27/2017 07/27/2017 0
91 39 03/01/2017 07/27/2017 .
99 91 07/04/2017 03/01/2017 .
999 99 02/22/2017 07/04/2017 .
999 999 02/22/2017 02/22/2017 0
999 999 02/22/2017 02/22/2017 0
999 999 02/22/2017 02/22/2017 1
我排序有误吗?还是我需要指定另一个滞后选项?感谢您的帮助!
您找到重复项的两种方法都很好并且应该有效,但这里有两种更有效的方法:
aggregate out=* mode=add /break=ID CorrDate/occurrences=n.
这将创建一个新变量,其中包含 ID
和 CorrDate
的每个组合在数据中出现的次数。
如果您需要更多选项(例如,自动选择一个重复项进行保存),请使用菜单数据 > 识别重复个案,选择您需要的选项。
关于似乎不起作用的案例:
如果 SPSS 说这两个日期不相等,则它们不...
就像@horace_vr 说的,日期可能也包含时间。您可以通过将日期格式更改为包括时间,或者只是将类型更改为数字,轻松地在数据中看到这一点,然后就会看到差异。
我有一个这样的 SPSS 数据集,我想在其中确定后续日期是否是给定 ID 的前一个日期的 "duplicate":
ID CorrDate
39 07/24/2017
39 07/25/2017
39 07/27/2017
39 07/27/2017
91 03/01/2017
99 07/04/2017
999 02/22/2017
999 02/22/2017
999 02/22/2017
999 02/22/2017
我在 SPSS 中尝试了以下 LAG 函数:
SORT CASES BY ID(A) CorrDate(A).
IF (ID=LAG(ID) AND CorrDate ne LAG(CorrDate)) Duplicate = 0.
EXECUTE.
IF (ID=LAG(ID) AND CorrDate eq LAG(CorrDate)) Duplicate = 1.
EXECUTE.
然而,这似乎没有产生准确的结果,所以我尝试了以下命令,看看是否可以确定问题的根源:
COMPUTE PreviousID=LAG(ID).
COMPUTE PreviousDate=LAG(CorrDate).
EXECUTE.
IF (ID=PreviousID) AND (CorrDate~=PreviousDate) Duplicate = 0.
EXECUTE.
IF (ID=PreviousID) AND (CorrDate=PreviousDate) Duplicate = 1.
EXECUTE.
两者都产生了以下输出,似乎没有正确识别 ID #39 和 999 的重复项:
ID PreviousID CorrDate PreviousDate Duplicate
39 39 07/24/2017 07/23/2017 0
39 39 07/25/2017 07/24/2017 0
39 39 07/27/2017 07/25/2017 0
39 39 07/27/2017 07/27/2017 0
91 39 03/01/2017 07/27/2017 .
99 91 07/04/2017 03/01/2017 .
999 99 02/22/2017 07/04/2017 .
999 999 02/22/2017 02/22/2017 0
999 999 02/22/2017 02/22/2017 0
999 999 02/22/2017 02/22/2017 1
我排序有误吗?还是我需要指定另一个滞后选项?感谢您的帮助!
您找到重复项的两种方法都很好并且应该有效,但这里有两种更有效的方法:
aggregate out=* mode=add /break=ID CorrDate/occurrences=n.
这将创建一个新变量,其中包含 ID
和 CorrDate
的每个组合在数据中出现的次数。
如果您需要更多选项(例如,自动选择一个重复项进行保存),请使用菜单数据 > 识别重复个案,选择您需要的选项。
关于似乎不起作用的案例: 如果 SPSS 说这两个日期不相等,则它们不... 就像@horace_vr 说的,日期可能也包含时间。您可以通过将日期格式更改为包括时间,或者只是将类型更改为数字,轻松地在数据中看到这一点,然后就会看到差异。