患者在第一個疾病值之前是否只有一個 0 疾病值,還是在第一個 1 之前可以有多個 0 值?
編輯:
根據數據,這裡有兩種可能的解決方案:
在第一個中,首先按患者 ID 和時間對數據進行排序,然後創建兩個公式列並檢查是否應包含您感興趣的信息。 可能會遺漏一些邊緣情況(如最後一行)。
Names Default To Here(1);
dt = New Table("Untitled",
Add Rows(14),
Compress File When Saved(1),
New Column("PatientID",
Numeric,
"Nominal",
Format("Best", 12),
Set Values([1, 1, 1, 1, 2, 2, 1, 3, 3, 3, 3, 1, 1, 1]),
Set Display Width(62)
),
New Column("Status",
Numeric,
"Nominal",
Format("Best", 12),
Set Values([0, 0, 0, 0, 0, 1, 1, 0, 1, 0, 0, 0, 1, 0]),
Set Display Width(50)
),
New Column("Time",
Numeric,
"Continuous",
Format("m.d.y h:m", 19),
Input Format("m.d.y h:m"),
Set Values(
[3660718210, 3660718260, 3660718320, 3660718380, 3660718440, 3660718500, 3660718560, 3660718620, 3660718680,
3660718740, 3660718800, 3660718860, 3660718920, 3660718920]
)
)
);
// Sort data table
dt << Sort(By(:PatientID, :Time), Replace Table, Order(Ascending, Ascending));
//add formula columns
dt << New Column("CumSumOfStatus",
Numeric,
"Continuous",
Format("Best", 12),
Formula(Col Cumulative Sum(:Status, :PatientID))
);
//add formula columns
dt << New Column("Check",
Numeric,
"Continuous",
Format("Best", 12),
Formula(
If(Row() == 1, :Status);
If(Lag(:CumSumOfStatus, -1) == 1 & Lag(:PatientID) == :PatientID,
1,
0
);
)
);
第二個是期望患者 ID 在第一個 1 狀態之前只有一個 0 狀態,這允許您使用摘要獲得兩種狀態的最短時間:
//If only one 0 before 1
dt2 = New Table("Untitled",
Add Rows(11),
Compress File When Saved(1),
New Column("PatientID",
Numeric,
"Nominal",
Format("Best", 12),
Set Values([1, 1, 1, 1, 1, 2, 2, 3, 3, 3, 3]),
Set Display Width(62)
),
New Column("Status",
Numeric,
"Nominal",
Format("Best", 12),
Set Values([0, 1, 0, 1, 0, 0, 1, 0, 1, 0, 0]),
Set Display Width(50)
),
New Column("Time",
Numeric,
"Continuous",
Format("m.d.y h:m", 19),
Input Format("m.d.y h:m"),
Set Values(
[3660718380, 3660718560, 3660718860, 3660718920, 3660718920, 3660718440, 3660718500, 3660718620, 3660718680,
3660718740, 3660718800]
)
)
);
dt << Summary(Group(:PatientID), Min(:Time), Subgroup(:Status), Freq("None"), Weight("None"));