Clinical — Table 1 baseline characteristics
Table 1 for a randomised trial: baseline characteristics by arm and overall, each continuous row summarised the way its own distribution calls for, categorical rows as n (%), and missing data counted per cell. Typed FlowScript for clinical trials. Keywords: CONSORT, randomised, randomized, trial, RCT, flow diagram, PRISMA, cohort.
Make it your own.
// Table 1 for a randomised trial: baseline characteristics by arm and overall, each continuous row summarised the way its own distribution calls for, categorical rows as n (%), and missing data counted per cell.
//
// Every string below is EXAMPLE text from a fictional trial: replace it.
//
// How the document is shaped, because nesting decides meaning here: a
// group directly under table_one is a COLUMN; a distribution is a ROW; a
// group inside a distribution is that row's cell, carries the raw
// observations, and names its column with from:. A categorical row's
// series carries the counts per category, in the order of its labels,
// which for a categorical variable is the complete data.
//
// Nothing is summarised by hand. The table tests each continuous row for
// skew and prints mean (SD) or median [IQR] accordingly — NT-proBNP comes
// out as a median because its distribution is strongly right-skewed — and
// counts a cell's missing values as the column's n minus the observations
// it actually holds, so a null below is reported, never imputed.
//
// No baseline p-values: in a randomised trial the null hypothesis of
// equal populations is true by design (CONSORT 2010, item 15).
study hf_remote {
title: "Remote monitoring versus usual care after hospitalisation for heart failure"
design: "Randomised, open-label, parallel-group trial"
}
table_one baseline {
title: "Table 1. Baseline characteristics of the randomised participants"
overall: true
digits: 0
categorical_summary: n_percent
group remote { label: "Remote monitoring" n: 40 }
group usual { label: "Usual care" n: 40 }
distribution age {
label: "Age, years"
group age_remote {
from: remote
values: [
66, 66, 59, 96, 65, 73, 68, 78, 65, 70, 73, 58, 60, 61, 57, 91, 69, 66, 62, 69,
58, 73, 78, 59, 57, 79, 66, 79, 59, 92, 65, 68, 74, 56, 78, 71, 65, 77, 79, 60
]
}
group age_usual {
from: usual
values: [
60, 68, 73, 84, 46, 82, 58, 51, 61, 75, 81, 73, 66, 76, 65, 66, 78, 74, 88, 76,
68, 76, 73, 69, 76, 63, 59, 77, 70, 72, 64, 63, 55, 61, 68, 68, 60, 75, 67, 75
]
}
}
distribution sex {
label: "Sex"
series sex_remote { group: remote labels: ["Female", "Male"] values: [14, 26] }
series sex_usual { group: usual labels: ["Female", "Male"] values: [9, 31] }
}
distribution nyha {
label: "NYHA functional class"
series nyha_remote { group: remote labels: ["II", "III", "IV"] values: [22, 17, 1] }
series nyha_usual { group: usual labels: ["II", "III", "IV"] values: [24, 14, 2] }
}
distribution lvef {
label: "Left ventricular ejection fraction, %"
group lvef_remote {
from: remote
values: [
23, 23, 31, 22, 31, 28, 28, 36, 36, 33, 31, 21, 32, 31, 28, 28, 20, null, 29, 29,
28, 27, 29, 27, 30, 34, 37, 24, 36, 34, 34, 29, 28, 19, 24, 33, 34, 28, 26, 31
]
}
group lvef_usual {
from: usual
values: [
35, 28, 25, 29, 21, 25, 28, 19, 33, 26, 39, 43, 26, 17, 28, 27, 28, 23, 33, 31,
34, 32, 22, 28, 29, 36, 33, 17, 33, 25, 27, 35, 31, 26, 31, 21, 29, 37, 36, 34
]
}
}
distribution nt_probnp {
label: "NT-proBNP, pg/mL"
group bnp_remote {
from: remote
values: [
3260, 2770, 1080, 1400, 630, 2100, 2050, 6020, 3190, 790, 1160, 2830, 590, 1280, 1560, 2300, 1000, 6540, 2420, 3920,
1290, 590, 1390, 2420, 2120, 1900, 2470, 14730, 4830, 800, 820, 660, 530, 2960, 1380, 1680, 2510, 620, 3070, 1030
]
}
group bnp_usual {
from: usual
values: [
710, 960, 920, 400, 740, null, 3270, 2230, 2320, 2800, 2420, 2220, 4220, 4280, 1070, 6210, 1730, 3510, 2770, 1410,
1610, 1020, 1830, 1680, 1240, 11920, 3750, 1560, null, 2620, 2130, 970, 3690, 1320, 640, 930, 2180, 980, 1450, 660
]
}
}
distribution egfr {
label: "eGFR, mL/min/1.73 m²"
group egfr_remote {
from: remote
values: [
73, 44, 74, 65, 31, 64, 59, 37, 24, 77, 45, 81, 57, 48, 38, 56, 100, 91, 73, 93,
57, 52, 83, 53, 38, 101, 41, 59, 88, 66, 60, null, 64, 39, 63, 41, 75, 78, 49, 54
]
}
group egfr_usual {
from: usual
values: [
67, 62, 83, 55, 59, 68, 72, 29, 87, 79, 97, 67, 56, 50, 54, 42, 53, 32, 48, 100,
52, 64, 78, 58, 69, 28, 94, 64, 28, 111, 38, 94, 50, 62, 76, 44, 81, 63, 72, 61
]
}
}
distribution sbp {
label: "Systolic blood pressure, mmHg"
group sbp_remote {
from: remote
values: [
113, 111, 106, 107, 118, 118, 143, 129, 112, 119, 122, 121, 102, 106, 135, 99, 122, 117, 92, 122,
135, 126, 134, 116, 104, 135, 107, 126, 128, 139, 141, 120, 131, 125, 121, 138, 104, 121, 116, 126
]
}
group sbp_usual {
from: usual
values: [
108, 117, 126, 117, 125, 116, 111, 109, 125, 97, 131, 111, 126, 83, 110, 128, 142, 123, 104, 133,
113, 131, 133, 127, 125, 125, 126, 88, 120, 93, 103, 121, 118, 128, 136, 120, 114, 149, 98, 109
]
}
}
distribution diabetes {
label: "Diabetes mellitus"
series dm_remote { group: remote labels: ["Yes", "No"] values: [17, 23] }
series dm_usual { group: usual labels: ["Yes", "No"] values: [15, 25] }
}
distribution atrial_fibrillation {
label: "Atrial fibrillation"
series af_remote { group: remote labels: ["Yes", "No"] values: [18, 22] }
series af_usual { group: usual labels: ["Yes", "No"] values: [17, 23] }
}
}
view baseline_table: table_one(baseline)