Skip to content
FlowScript templates

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.

Template previewFlowScript
Table 1. Baseline characteristics of the randomised participantsBaseline characteristics table: 18 printed line(s) over 2 group column(s) — Remote monitoring, n = 40; Usual care, n = 40. Age, years — Remote monitoring (n = 40): 69 (10); Usual care (n = 40): 69 (9); Overall (n = 80): 69 (9). Sex. Female — Remote monitoring (n = 40): 14 (35%); Usual care (n = 40): 9 (23%); Overall (n = 80): 23 (29%). Male — Remote monitoring (n = 40): 26 (65%); Usual care (n = 40): 31 (78%); Overall (n = 80): 57 (71%). NYHA functional class. II — Remote monitoring (n = 40): 22 (55%); Usual care (n = 40): 24 (60%); Overall (n = 80): 46 (58%). III — Remote monitoring (n = 40): 17 (43%); Usual care (n = 40): 14 (35%); Overall (n = 80): 31 (39%). IV — Remote monitoring (n = 40): 1 (3%); Usual care (n = 40): 2 (5%); Overall (n = 80): 3 (4%). Left ventricular ejection fraction, % — Remote monitoring (n = 40): 29 (5) (1 missing); Usual care (n = 40): 29 (6); Overall (n = 80): 29 (5) (1 missing). NT-proBNP, pg/mL — Remote monitoring (n = 40): 1790 [1023–2785]; Usual care (n = 40): 1705 [990–2733] (2 missing); Overall (n = 80): 1705 [1005–2770] (2 missing). eGFR, mL/min/1.73 m² — Remote monitoring (n = 40): 61 (19) (1 missing); Usual care (n = 40): 64 (20); Overall (n = 80): 63 (20) (1 missing). Systolic blood pressure, mmHg — Remote monitoring (n = 40): 120 (12); Usual care (n = 40): 118 (14); Overall (n = 80): 119 (13). Diabetes mellitus. Yes — Remote monitoring (n = 40): 17 (43%); Usual care (n = 40): 15 (38%); Overall (n = 80): 32 (40%). No — Remote monitoring (n = 40): 23 (58%); Usual care (n = 40): 25 (63%); Overall (n = 80): 48 (60%). Atrial fibrillation. Yes — Remote monitoring (n = 40): 18 (45%); Usual care (n = 40): 17 (43%); Overall (n = 80): 35 (44%). No — Remote monitoring (n = 40): 22 (55%); Usual care (n = 40): 23 (58%); Overall (n = 80): 45 (56%). Cells are the summary the variable's type calls for: mean (SD) for symmetric continuous variables, median [IQR] for skewed continuous variables, n (%) for categorical variables. Missingness is printed under any cell that has some. Shape judged by D'Agostino–Pearson K² at α = 0.05 for: Age, years (K² = 0.23, G₁ = 0.39), Left ventricular ejection fraction, % (K² = 0.87, G₁ = -0.14), NT-proBNP, pg/mL (K² < 0.001, G₁ = 3.43), eGFR, mL/min/1.73 m² (K² = 0.47, G₁ = 0.24), Systolic blood pressure, mmHg (K² = 0.42, G₁ = -0.34). A test is not a licence — read the raincloud before trusting a summary. Missingness is the column's declared n minus the observations the cell contains — never read from a typed `missing:`. No baseline p-values, which for a randomised trial is the position CONSORT takes: the null being tested is true by construction, so the p carries no information about confounding. `smd: true` prints the balance statistic instead. Age, years: No test reported, by request. For a randomised baseline table this is the position CONSORT takes: the null being tested is known to be true, so the p-value carries no information about confounding. Left ventricular ejection fraction, %: No test reported, by request. For a randomised baseline table this is the position CONSORT takes: the null being tested is known to be true, so the p-value carries no information about confounding. NT-proBNP, pg/mL: No test reported, by request. For a randomised baseline table this is the position CONSORT takes: the null being tested is known to be true, so the p-value carries no information about confounding. eGFR, mL/min/1.73 m²: No test reported, by request. For a randomised baseline table this is the position CONSORT takes: the null being tested is known to be true, so the p-value carries no information about confounding. Systolic blood pressure, mmHg: No test reported, by request. For a randomised baseline table this is the position CONSORT takes: the null being tested is known to be true, so the p-value carries no information about confounding.Table 1. Baseline characteristics of the randomised participantsCharacteristicRemote monitoringn = 40Usual caren = 40Overalln = 80Age, years69 (10)69 (9)69 (9)SexFemale14 (35%)9 (23%)23 (29%)Male26 (65%)31 (78%)57 (71%)NYHA functional classII22 (55%)24 (60%)46 (58%)III17 (43%)14 (35%)31 (39%)IV1 (3%)2 (5%)3 (4%)Left ventricular ejection fraction, %29 (5)1 missing29 (6)29 (5)1 missingNT-proBNP, pg/mL1790 [1023–2785]1705 [990–2733]2 missing1705 [1005–2770]2 missingeGFR, mL/min/1.73 m²61 (19)1 missing64 (20)63 (20)1 missingSystolic blood pressure, mmHg120 (12)118 (14)119 (13)Diabetes mellitusYes17 (43%)15 (38%)32 (40%)No23 (58%)25 (63%)48 (60%)Atrial fibrillationYes18 (45%)17 (43%)35 (44%)No22 (55%)23 (58%)45 (56%)Cells are the summary the variable's type calls for: mean (SD) for symmetric continuous variables, median [IQR] for skewed continuous variables, n (%)for categorical variables. Missingness is printed under any cell that has some.Shape judged by D'Agostino–Pearson K² at α = 0.05 for: Age, years (K² = 0.23, G₁ = 0.39), Left ventricular ejection fraction, % (K² = 0.87, G₁ = -0.14),NT-proBNP, pg/mL (K² < 0.001, G₁ = 3.43), eGFR, mL/min/1.73 m² (K² = 0.47, G₁ = 0.24), Systolic blood pressure, mmHg (K² = 0.42, G₁ = -0.34). A test isnot a licence — read the raincloud before trusting a summary.Missingness is the column's declared n minus the observations the cell contains — never read from a typed `missing:`.No baseline p-values, which for a randomised trial is the position CONSORT takes: the null being tested is true by construction, so the p carries noinformation about confounding. `smd: true` prints the balance statistic instead.Age, years: No test reported, by request. For a randomised baseline table this is the position CONSORT takes: the null being tested is known to be true,so the p-value carries no information about confounding.Left ventricular ejection fraction, %: No test reported, by request. For a randomised baseline table this is the position CONSORT takes: the null beingtested is known to be true, so the p-value carries no information about confounding.NT-proBNP, pg/mL: No test reported, by request. For a randomised baseline table this is the position CONSORT takes: the null being tested is known tobe true, so the p-value carries no information about confounding.eGFR, mL/min/1.73 m²: No test reported, by request. For a randomised baseline table this is the position CONSORT takes: the null being tested is knownto be true, so the p-value carries no information about confounding.Systolic blood pressure, mmHg: No test reported, by request. For a randomised baseline table this is the position CONSORT takes: the null being testedis known to be true, so the p-value carries no information about confounding.

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)