假设有以下数据集:
data DB;
input ID :$20. Admission :date09. Discharge :date09. morbidity;
format Admission date9. Discharge date9.;
cards;
0001 13JAN2017 25JAN2017 1
0001 13JAN2017 25JAN2017 1
0001 22FEB2018 03MAR2018 0
0001 30JAN2019 04MAR2019 0
0002 01DEC2018 14DEC2018 0
0002 25DEC2018 02JAN2019 1
0002 25NOV2020 03DEC2020 0
0003 09JAN2016 25JAN2016 0
0003 29JAN2018 12FEB2018 0
...;
发病率 = 1 表示发病发生在该日期。如果日期重复,则如果发病则为 1,否则为 0。有没有办法获取以下数据集?
data DB1;
input ID :$20. Admission :date09. Discharge :date09. morbidity new_morbidity;
format Admission date9. Discharge date9.;
cards;
0001 13JAN2017 25JAN2017 1 1
0001 13JAN2017 25JAN2017 1 1
0001 22FEB2018 03MAR2018 0 1
0001 30JAN2019 04MAR2019 0 1
0002 01DEC2018 14DEC2018 0 0
0002 25DEC2018 02JAN2019 1 1
0002 25NOV2020 03DEC2020 0 1
0003 09JAN2016 25JAN2016 0 0
0003 29JAN2018 12FEB2018 0 0
...;
换句话说,对于每个日期、每个 ID(患者),如果发病率发生在实际日期之前,则如果发病率 = 0,则实际日期应该具有 new_morbidity = 1。否则,当然,如果发病率已经 = 1,则将具有 new_morbidity= 1。逐行、逐日地浏览患者的历史记录。
有人能帮帮我吗?我不知道如何管理实际日期与之前日期的比较。
先感谢您
假设您的数据是按 排序的
ID, admission
。当患者死亡时,new_morbidity
此后所有记录的 都应该为 1,除非他们是耶稣。我们可以利用按组处理和语句retain
来处理这个问题。我们将通过
new_morbidity
自动保留来实现这一点。由于它的值不会在每个步骤中初始化,因此我们只会在特定情况下为其赋值。该值将保留,直到我们决定它需要一个新值。如果它是组中的第一个 ID 或 为
morbidity
1,则设置new_morbidity
为该值。这意味着如果morbidity
第一个值为 0 或 1,则 0 或 1 将始终继续向前new_morbidity
。如果morbidity
从 0 翻转为 1,我们也将继续为该患者保留new_morbidity
1。对于耶稣的极端情况,我只会这样做
if(id = 'Jesus') then new_morbidity=0;