我有一個包含患者資料的資料集。我想計算從患者第一次就診到最后一次到醫院已經過去了多少天。我還需要一個虛擬變數(0,1),如果觀察是資料集中的患者(根據訪問日期),則取值為 1。資料集如下所示:
Patient ID Visit date
1 2014-04-21
1 2015-01-29
1 2021-04-14
2 2020-01-03
2 2021-07-04
. .
. .
我想要的是:
Patient ID Visit date First visit Difference between first visit and last (in days)
1 2014-04-21 1 0
1 2015-01-29 0 283
1 2021-04-14 0 2550
2 2020-01-03 1 0
2 2021-07-04 0 548
. . . .
. . . .
如果我按患者 ID 和就診日期對資料集進行排序并運行代碼:if first.PatientID then do; First_visit = 1; end;
我能夠創建我的虛擬變數。我無法計算第一次和最后一次訪問之間的天數差異。非常感謝任何幫助。謝謝!
uj5u.com熱心網友回復:
您將需要保留一個新變數來獲取累計天數。如果您使用 SUM 陳述句,則會自動保留變數。如果您使用 DIF() 函式來獲取當前日期和上一個日期之間的天數差異,那么您可以只保留 DAYS 變數本身,而不需要保留實際的第一個日期值。
data have;
input ID DATE :yymmdd.;
format date yymmdd10.;
cards;
1 2014-04-21
1 2015-01-29
1 2021-04-14
2 2020-01-03
2 2021-07-04
;
data want;
set have;
by id date;
first_visit=first.id;
days dif(date);
if first.id then days=0;
run;
一些筆記。
首先。變數已經編碼為 1/0,所以只需使用賦值陳述句將其值保存到永久變數中。
不要有條件地運行 DIF() 函式。這將跳過將當前日期添加到堆疊中以便下次檢索。這就是為什么您應該在將 DAYS 強制為零之前將 DIF() 添加到 DAYS 以進行 ID 的第一次觀察。
結果:
first_
Obs ID DATE visit days
1 1 2014-04-21 1 0
2 1 2015-01-29 0 283
3 1 2021-04-14 0 2550
4 2 2020-01-03 1 0
5 2 2021-07-04 0 548
uj5u.com熱心網友回復:
data WANT;
set HAVE;
by ID;
first_visit = first.ID;
retain firstDate;
if first.ID then firstDate = Date;
days = Date - firstDate;
drop firstDate;
run;
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/477071.html