Update actual records of a variable based on the date before

suppose to have the following dataset:

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
<code>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
...;
</code>
<code>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 ...; </code>
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 
...;

The morbidity = 1 indicates that the morbidity occurred at that date. If dates are replicated they have both 1 if the morbidity occurred and 0 if not. Is there a way to get the following dataset?

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
<code>
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
...;
</code>
<code> 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 ...; </code>


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 
...;

In other words, for each date, for each ID (patient), if the morbidity occurred before the actual date, the actual date should have new_morbidity = 1 if it has morbidity = 0. Otherwise, of course, it will have new_morbidity= 1 if morbidity is already = 1. This row by row, date by date through the history of the patient.

Can anyone help me please? I don’t know how to manage the comparison actual date-date before.

Thank you in advance

Let’s assume your data is ordered by ID, admission. When a patient dies, new_morbidity should be 1 for all of their records thereafter unless they are Jesus. We can take advantage of by-group processing and the retain statement to handle this.

We’ll do this by having new_morbidity automatically retained. Since its value is not initialized at each step, we’ll give it a value only under certain circumstances. That value will be retained until we decide it needs to be a new value.

If it’s the first ID in the group or if morbidity is 1, set new_morbidity to that value. This means if morbidity is a 0 or a 1 for the first value, 0 or 1 will always continue forward in new_morbidity. If morbidity flips from a 0 to a 1, we’ll also continue keeping new_morbidity a 1 thereafter for that patient.

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
<code>data want;
set db;
by id;
retain new_morbidity;
if(first.id or morbidity=1) then new_morbidity = morbidity;
run;
</code>
<code>data want; set db; by id; retain new_morbidity; if(first.id or morbidity=1) then new_morbidity = morbidity; run; </code>
data want;
    set db;
    by id;
    retain new_morbidity;

    if(first.id or morbidity=1) then new_morbidity = morbidity;
run;
Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
<code>ID Admission Discharge morbidity new_morbidity
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
</code>
<code>ID Admission Discharge morbidity new_morbidity 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 </code>
ID      Admission   Discharge   morbidity   new_morbidity
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

For the Jesus edge case, I would just do if(id = 'Jesus') then new_morbidity=0;

Trang chủ Giới thiệu Sinh nhật bé trai Sinh nhật bé gái Tổ chức sự kiện Biểu diễn giải trí Dịch vụ khác Trang trí tiệc cưới Tổ chức khai trương Tư vấn dịch vụ Thư viện ảnh Tin tức - sự kiện Liên hệ Chú hề sinh nhật Trang trí YEAR END PARTY công ty Trang trí tất niên cuối năm Trang trí tất niên xu hướng mới nhất Trang trí sinh nhật bé trai Hải Đăng Trang trí sinh nhật bé Khánh Vân Trang trí sinh nhật Bích Ngân Trang trí sinh nhật bé Thanh Trang Thuê ông già Noel phát quà Biểu diễn xiếc khỉ Xiếc quay đĩa Dịch vụ tổ chức sự kiện 5 sao Thông tin về chúng tôi Dịch vụ sinh nhật bé trai Dịch vụ sinh nhật bé gái Sự kiện trọn gói Các tiết mục giải trí Dịch vụ bổ trợ Tiệc cưới sang trọng Dịch vụ khai trương Tư vấn tổ chức sự kiện Hình ảnh sự kiện Cập nhật tin tức Liên hệ ngay Thuê chú hề chuyên nghiệp Tiệc tất niên cho công ty Trang trí tiệc cuối năm Tiệc tất niên độc đáo Sinh nhật bé Hải Đăng Sinh nhật đáng yêu bé Khánh Vân Sinh nhật sang trọng Bích Ngân Tiệc sinh nhật bé Thanh Trang Dịch vụ ông già Noel Xiếc thú vui nhộn Biểu diễn xiếc quay đĩa Dịch vụ tổ chức tiệc uy tín Khám phá dịch vụ của chúng tôi Tiệc sinh nhật cho bé trai Trang trí tiệc cho bé gái Gói sự kiện chuyên nghiệp Chương trình giải trí hấp dẫn Dịch vụ hỗ trợ sự kiện Trang trí tiệc cưới đẹp Khởi đầu thành công với khai trương Chuyên gia tư vấn sự kiện Xem ảnh các sự kiện đẹp Tin mới về sự kiện Kết nối với đội ngũ chuyên gia Chú hề vui nhộn cho tiệc sinh nhật Ý tưởng tiệc cuối năm Tất niên độc đáo Trang trí tiệc hiện đại Tổ chức sinh nhật cho Hải Đăng Sinh nhật độc quyền Khánh Vân Phong cách tiệc Bích Ngân Trang trí tiệc bé Thanh Trang Thuê dịch vụ ông già Noel chuyên nghiệp Xem xiếc khỉ đặc sắc Xiếc quay đĩa thú vị
Trang chủ Giới thiệu Sinh nhật bé trai Sinh nhật bé gái Tổ chức sự kiện Biểu diễn giải trí Dịch vụ khác Trang trí tiệc cưới Tổ chức khai trương Tư vấn dịch vụ Thư viện ảnh Tin tức - sự kiện Liên hệ Chú hề sinh nhật Trang trí YEAR END PARTY công ty Trang trí tất niên cuối năm Trang trí tất niên xu hướng mới nhất Trang trí sinh nhật bé trai Hải Đăng Trang trí sinh nhật bé Khánh Vân Trang trí sinh nhật Bích Ngân Trang trí sinh nhật bé Thanh Trang Thuê ông già Noel phát quà Biểu diễn xiếc khỉ Xiếc quay đĩa
Thiết kế website Thiết kế website Thiết kế website Cách kháng tài khoản quảng cáo Mua bán Fanpage Facebook Dịch vụ SEO Tổ chức sinh nhật