SPSS - 在一个日历月内标记案例
SPSS - flag cases within a calendar month
我有一份囚犯名单,以及他们的刑期开始时间 (PrisonStart) 和结束时间 (PrisonEnd)。如果他们还在监狱里,PrisonEnd 是空白的。
我想标记在 6 个月期间(2016 年 1 月 1 日至 2016 年 5 月 30 日)至少有一个完整日历月入狱的囚犯。
compute PeriodBeg = date.mdy(01,01,16).
compute PeriodEnd = date.mdy(05,30,16).
formats PeriodBeg PeriodEnd (adate10).
execute.
关于如何最好地解决这个问题有什么建议吗?看来我可能需要分别比较囚犯在 6 个月期间每个月的开始和结束日期(如下所示),然后 select 至少有一个完整月份的任何囚犯,但我想知道是否有一种更有效的方法。
if ((PrisonStart le [January 1, 2016]) and (PrisonEnd ge ([January 31, 2016]) | missing(PrisonEnd))) InPrisonJan = 1.
if ((PrisonStart le [February 1, 2016]) and (PrisonEnd ge ([February 28, 2016]) | missing(PrisonEnd))) InPrisonFeb = 1.
etc.
execute.
下面是一些示例数据。前两名囚犯应被标记为在 6 个月期间至少在监狱中待了一个完整的日历月(OneMonth = 1)。最后三名囚犯在 6 个月期间至少有一个完整的日历月没有入狱(OneMonth = 0)。
data list list /PrisonerID (F8.0) PrisonStart (adate10) PrisonEnd (adate10) PeriodBeg (adate10) PeriodEnd (adate10).
begin data
1 10.3.14 7.12.16 1.1.16 5.30.16
2 2.9.16 4.1.16 1.1.16 5.30.16
3 5.2.16 10.11.16 1.1.16 5.30.16
4 12.1.13 2.8.14 1.1.16 5.30.16
5 1.7.16 1.20.16 1.1.16 5.30.16
6 1.1.17 3.2.17 1.1.16 5.30.16
end data.
以下语法避免单独提及每个月的最后一天,因此它可用于跨任意数量的月份进行自动化。检查日期是否为该月最后一天的技巧是检查下个月的“0”日:
do repeat inpr=inPrison1 to inPrison5/ mon=1 to 5.
compute inpr=( PrisonStart<=date.dmy(1,mon,2016) and
(PrisonEnd>=date.dmy(0,mon+1,2016) or missing (PrisonEnd)) ).
end repeat.
我有一份囚犯名单,以及他们的刑期开始时间 (PrisonStart) 和结束时间 (PrisonEnd)。如果他们还在监狱里,PrisonEnd 是空白的。
我想标记在 6 个月期间(2016 年 1 月 1 日至 2016 年 5 月 30 日)至少有一个完整日历月入狱的囚犯。
compute PeriodBeg = date.mdy(01,01,16).
compute PeriodEnd = date.mdy(05,30,16).
formats PeriodBeg PeriodEnd (adate10).
execute.
关于如何最好地解决这个问题有什么建议吗?看来我可能需要分别比较囚犯在 6 个月期间每个月的开始和结束日期(如下所示),然后 select 至少有一个完整月份的任何囚犯,但我想知道是否有一种更有效的方法。
if ((PrisonStart le [January 1, 2016]) and (PrisonEnd ge ([January 31, 2016]) | missing(PrisonEnd))) InPrisonJan = 1.
if ((PrisonStart le [February 1, 2016]) and (PrisonEnd ge ([February 28, 2016]) | missing(PrisonEnd))) InPrisonFeb = 1.
etc.
execute.
下面是一些示例数据。前两名囚犯应被标记为在 6 个月期间至少在监狱中待了一个完整的日历月(OneMonth = 1)。最后三名囚犯在 6 个月期间至少有一个完整的日历月没有入狱(OneMonth = 0)。
data list list /PrisonerID (F8.0) PrisonStart (adate10) PrisonEnd (adate10) PeriodBeg (adate10) PeriodEnd (adate10).
begin data
1 10.3.14 7.12.16 1.1.16 5.30.16
2 2.9.16 4.1.16 1.1.16 5.30.16
3 5.2.16 10.11.16 1.1.16 5.30.16
4 12.1.13 2.8.14 1.1.16 5.30.16
5 1.7.16 1.20.16 1.1.16 5.30.16
6 1.1.17 3.2.17 1.1.16 5.30.16
end data.
以下语法避免单独提及每个月的最后一天,因此它可用于跨任意数量的月份进行自动化。检查日期是否为该月最后一天的技巧是检查下个月的“0”日:
do repeat inpr=inPrison1 to inPrison5/ mon=1 to 5.
compute inpr=( PrisonStart<=date.dmy(1,mon,2016) and
(PrisonEnd>=date.dmy(0,mon+1,2016) or missing (PrisonEnd)) ).
end repeat.