我是R和data.table的新手,我的大脑想在SAS中思考,因此我正在寻找解决以下问题的方法。
我的健康账单跨度为“从”到“直通”。我想创建招生,在这里我标记所有连续的账单(即,它们之间不超过一天)。在下面的示例数据中,“ patient”,“ from”和“ thru”列是我们开始的内容,而“ admit”列是我要添加的内容。
Name From Thru Admit
John 1/1/18 1/7/18 1
John 1/8/18 1/15/18 1
John 1/18/18 1/20/18 2
Jane 1/1/18 1/3/18 3
Jane 1/5/18 1/8/18 4
Jane 1/10/18 1/17/18 5
Jane 1/12/18 1/17/18 5
Jane 1/18/18 1/24/18 5
Frank 2/1/18 2/1/18 6
Frank 2/1/18 2/10/18 6
Frank 2/3/18 2/3/18 6
Frank 2/4/18 2/4/18 6
Frank 2/5/18 2/5/18 6
我更喜欢面向数据表的解决方案。我需要某种提示-在SAS中,我确切地知道如何执行此操作,但是我正在尝试学习新知识。
谢谢。
答案 0 :(得分:1)
如果弗兰克(Frank)发表评论,则将您的data.table
称为DT
:
date_cols <- c("From", "Thru")
DT[, (date_cols) := lapply(.SD, as.Date, format = "%m/%d/%y"), .SDcols = date_cols]
DT[, Admit := 1 + cumsum(From - shift(Thru, fill = Thru[1]) > 1 |
Name != shift(Name, fill = Name[1]))]
DT
# Name From Thru Admit
# 1: John 2018-01-01 2018-01-07 1
# 2: John 2018-01-08 2018-01-05 1
# 3: John 2018-01-18 2018-01-20 2
# 4: Jane 2018-01-01 2018-01-03 3
# 5: Jane 2018-01-05 2018-01-08 4
# 6: Jane 2018-01-10 2018-01-17 5
# 7: Jane 2018-01-12 2018-01-17 5
# 8: Jane 2018-01-18 2018-01-24 5
尽管这假设每个患者的所有观察都是连续的,但您可能要确保数据中的观察结果是正确的。