根据之前的日期更新变量的实际记录

问题描述 投票:0回答:1

假设有以下数据集:

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。否则,当然,它将有new_morbidity=如果发病率已经 = 1,则为 1。逐行、逐日查看患者病史。

有人可以帮助我吗?我不知道如何管理之前的实际日期与日期的比较。

提前谢谢您

sas
1个回答
0
投票

假设您的数据按

ID, admission
排序。当患者死亡时,其后所有记录的
morbidity
都将为 1。我们可以利用按组处理和
retain
语句来处理这个问题。

我们将通过将现有的

morbidity
变量重命名为名为
_morbidity
的新变量来完成此操作。然后,我们将重新创建发病率变量,但会自动保留它。由于它的值不是在每一步都初始化的,所以我们只会在某些情况下给它一个值。该值将保留,直到我们决定它需要一个新值。

如果它是组中的第一个 ID 或者

_morbidity
为 1,则将
morbidity
设置为该值。这意味着如果第一个值是 0 或 1,则 0 或 1 将始终继续向前。如果它从 0 翻转到 1,我们也会继续为该患者保持 1。

data want;
    set db(rename=(morbidity=_morbidity));
    by id;
    retain morbidity;

    if(first.id or _morbidity=1) then morbidity = _morbidity;
    
    drop _morbidity;
run;
ID      Admission   Discharge   morbidity
0001    13JAN2017   25JAN2017   1
0001    13JAN2017   25JAN2017   1
0001    22FEB2018   03MAR2018   1
0001    30JAN2019   04MAR2019   1
0002    01DEC2018   14DEC2018   0
0002    25DEC2018   02JAN2019   1
0002    25NOV2020   03DEC2020   1
0003    09JAN2016   25JAN2016   0
0003    29JAN2018   12FEB2018   0
© www.soinside.com 2019 - 2024. All rights reserved.