Clinwright Public work of Helper Software LLC · free Start free

14.1.2

Demographic and Baseline Characteristics

Made 2026-10-17 from simulated data.

ONCO-EX

Table 14.1.2

Demographic and Baseline Characteristics

Intent-to-Treat Analysis Set

Standard of Care (N=150)Clinwrightinib 200 mg (N=150)Total (N=300)
Age
n150150300
Mean (SD)62.3 (8.24)63.6 (8.38)62.9 (8.33)
Median63.064.063.5
Min, Max39, 8542, 8839, 88
Pooled Age Group 1
<6583 (55.3%)82 (54.7%)165 (55.0%)
65-8064 (42.7%)63 (42.0%)127 (42.3%)
>803 (2.0%)5 (3.3%)8 (2.7%)
Sex
F70 (46.7%)69 (46.0%)139 (46.3%)
M80 (53.3%)81 (54.0%)161 (53.7%)
Race
WHITE133 (88.7%)141 (94.0%)274 (91.3%)
BLACK OR AFRICAN AMERICAN15 (10.0%)9 (6.0%)24 (8.0%)
AMERICAN INDIAN OR ALASKA NATIVE2 (1.3%)0 (0.0%)2 (0.7%)
Ethnicity
HISPANIC OR LATINO8 (5.3%)8 (5.3%)16 (5.3%)
NOT HISPANIC OR LATINO142 (94.7%)142 (94.7%)284 (94.7%)
Baseline Height (cm)
n148148296
Mean (SD)163.26 (10.128)163.55 (10.017)163.40 (10.057)
Median163.00163.35163.20
Min, Max130.8, 196.7132.7, 188.7130.8, 196.7
Baseline Weight (kg)
n148148296
Mean (SD)68.15 (12.801)66.62 (13.360)67.39 (13.084)
Median69.0566.6067.65
Min, Max36.0, 99.131.6, 98.031.6, 99.1
Baseline BMI (kg/m^2)
n146146292
Mean (SD)25.73 (5.706)25.07 (5.768)25.40 (5.736)
Median25.3524.6025.10
Min, Max13.1, 43.413.6, 38.413.1, 43.4

Percentages are of the subjects in each column.

Source: ADSL.

Program: t-14-1-2.sas

Program t-14-1-2.sas

Version 1, written from Clinwright's patterns, 2026-10-17, checks passed.

/*==== 00-header ====*/
/*----------------------------------------------------------------------------
  Output  : Table 14.1.2 / Demographic and Baseline Characteristics / Intent-to-Treat Analysis Set
  Program : t-14-1-2.sas   Reporting effort : CSR
  ADaM    : /work/adam (ADSL, ADLBC, ADLBH, ADVS, ADAE, ADEG, ADCM, ADMH, ADEX, ADRS, ADTR, ADTTE)
  The header and the report step follow from the shell. The sections between
  them make WORK.FINAL, one record per row of the table, in order:
    _page     the page (1 unless the output is paged); _pagelbl its heading or empty
    _ord      the row's order; _indent the label's indentation (0 = flush left)
    _rowid    the uuid of the shell row it shows (WORK._SHELL); one shell row may
              have several (a category per value); a blank row's is blank-<n>
    _kind     label | stat | blank
    rowlabel  the row's label, as text
    col1      Standard of Care|(N=xx)
    col2      Clinwrightinib 200 mg|(N=xx)
    col3      Total|(N=xx)
  and set the big N of the column headers:
    &_bign1    Standard of Care|(N=xx)
    &_bign2    Clinwrightinib 200 mg|(N=xx)
    &_bign3    Total|(N=xx)
  /work/_lib/clinwright.sas has %ls_bign, %ls_count, %ls_stats, %ls_npct, %ls_num.
----------------------------------------------------------------------------*/
libname adam "/work/adam" access=readonly;
%include "/work/_lib/clinwright.sas";
%ls_setup;

/* The shell's rows, in order, with each column's value pattern (_xx1-_xx3). */
data work._shell;
  length _page 8 _pagelbl $200 _ord 8 _indent 8 _rowid $36 _kind $5 _var $32 rowlabel $200 _xx1 $40 _xx2 $40 _xx3 $40;
  _page = 1; _pagelbl = '';
  _ord=1; _indent=0; _rowid='7210302d-c336-4bf4-9cbe-f87e07c2305f'; _kind='label'; _var='AGE'; rowlabel='Age'; _xx1=''; _xx2=''; _xx3=''; output;
  _ord=2; _indent=1; _rowid='3be947a3-e998-4944-9961-07d6ea189de4'; _kind='stat'; _var='AGE'; rowlabel='n'; _xx1='xx'; _xx2='xx'; _xx3='xx'; output;
  _ord=3; _indent=1; _rowid='9344f798-392d-49ae-b7f5-8ca74722454a'; _kind='stat'; _var='AGE'; rowlabel='Mean (SD)'; _xx1='xx.x (xx.xx)'; _xx2='xx.x (xx.xx)'; _xx3='xx.x (xx.xx)'; output;
  _ord=4; _indent=1; _rowid='685626ad-076d-4932-9ef3-b6cc6ad17ed1'; _kind='stat'; _var='AGE'; rowlabel='Median'; _xx1='xx.x'; _xx2='xx.x'; _xx3='xx.x'; output;
  _ord=5; _indent=1; _rowid='319164c0-40ad-46dc-8818-966a9c49c22a'; _kind='stat'; _var='AGE'; rowlabel='Min, Max'; _xx1='xx, xx'; _xx2='xx, xx'; _xx3='xx, xx'; output;
  _ord=6; _indent=0; _rowid='blank-6'; _kind='blank'; _var=''; rowlabel=''; _xx1=''; _xx2=''; _xx3=''; output;
  _ord=7; _indent=0; _rowid='5e169fd1-49c3-463f-84a5-594e48bf5a7a'; _kind='label'; _var='AGEGR1'; rowlabel='Pooled Age Group 1'; _xx1=''; _xx2=''; _xx3=''; output;
  _ord=8; _indent=1; _rowid='433d7d88-74a0-444d-9184-7c94a585d9bc'; _kind='stat'; _var='AGEGR1'; rowlabel='[Category]'; _xx1='xx (xx.x%)'; _xx2='xx (xx.x%)'; _xx3='xx (xx.x%)'; output;
  _ord=9; _indent=0; _rowid='blank-9'; _kind='blank'; _var=''; rowlabel=''; _xx1=''; _xx2=''; _xx3=''; output;
  _ord=10; _indent=0; _rowid='12353cc8-caf9-484b-8cde-6e6beb0877cb'; _kind='label'; _var='SEX'; rowlabel='Sex'; _xx1=''; _xx2=''; _xx3=''; output;
  _ord=11; _indent=1; _rowid='5ede580c-205f-40d1-a93c-b94b4b96d4d5'; _kind='stat'; _var='SEX'; rowlabel='[Category]'; _xx1='xx (xx.x%)'; _xx2='xx (xx.x%)'; _xx3='xx (xx.x%)'; output;
  _ord=12; _indent=0; _rowid='blank-12'; _kind='blank'; _var=''; rowlabel=''; _xx1=''; _xx2=''; _xx3=''; output;
  _ord=13; _indent=0; _rowid='97e5f88f-0332-4e7e-91df-430112598c6d'; _kind='label'; _var='RACE'; rowlabel='Race'; _xx1=''; _xx2=''; _xx3=''; output;
  _ord=14; _indent=1; _rowid='6108d979-ca42-4a01-a91d-a44fa6f16189'; _kind='stat'; _var='RACE'; rowlabel='[Category]'; _xx1='xx (xx.x%)'; _xx2='xx (xx.x%)'; _xx3='xx (xx.x%)'; output;
  _ord=15; _indent=0; _rowid='blank-15'; _kind='blank'; _var=''; rowlabel=''; _xx1=''; _xx2=''; _xx3=''; output;
  _ord=16; _indent=0; _rowid='5d056906-c0ae-4a47-a787-4f3af95fb7d9'; _kind='label'; _var='ETHNIC'; rowlabel='Ethnicity'; _xx1=''; _xx2=''; _xx3=''; output;
  _ord=17; _indent=1; _rowid='8defac8c-0f3e-4b80-b738-5a8bc79f79f4'; _kind='stat'; _var='ETHNIC'; rowlabel='[Category]'; _xx1='xx (xx.x%)'; _xx2='xx (xx.x%)'; _xx3='xx (xx.x%)'; output;
  _ord=18; _indent=0; _rowid='blank-18'; _kind='blank'; _var=''; rowlabel=''; _xx1=''; _xx2=''; _xx3=''; output;
  _ord=19; _indent=0; _rowid='00733e2e-cfc1-41ad-9825-ea491544a3f8'; _kind='label'; _var='HEIGHTBL'; rowlabel='Baseline Height (cm)'; _xx1=''; _xx2=''; _xx3=''; output;
  _ord=20; _indent=1; _rowid='a7a0e722-ce8b-4dd3-bed5-3566d146c287'; _kind='stat'; _var='HEIGHTBL'; rowlabel='n'; _xx1='xx'; _xx2='xx'; _xx3='xx'; output;
  _ord=21; _indent=1; _rowid='593f8965-bf5d-4569-afc6-e0d84554b799'; _kind='stat'; _var='HEIGHTBL'; rowlabel='Mean (SD)'; _xx1='xx.xx (xx.xxx)'; _xx2='xx.xx (xx.xxx)'; _xx3='xx.xx (xx.xxx)'; output;
  _ord=22; _indent=1; _rowid='fdcbf9bf-aa3a-4e35-b9aa-4086313ba1fa'; _kind='stat'; _var='HEIGHTBL'; rowlabel='Median'; _xx1='xx.xx'; _xx2='xx.xx'; _xx3='xx.xx'; output;
  _ord=23; _indent=1; _rowid='b21aec76-83f9-47b3-90cf-fd2fa6a3fe64'; _kind='stat'; _var='HEIGHTBL'; rowlabel='Min, Max'; _xx1='xx.x, xx.x'; _xx2='xx.x, xx.x'; _xx3='xx.x, xx.x'; output;
  _ord=24; _indent=0; _rowid='blank-24'; _kind='blank'; _var=''; rowlabel=''; _xx1=''; _xx2=''; _xx3=''; output;
  _ord=25; _indent=0; _rowid='aa475b83-8a49-46c7-8c3d-50be24361875'; _kind='label'; _var='WEIGHTBL'; rowlabel='Baseline Weight (kg)'; _xx1=''; _xx2=''; _xx3=''; output;
  _ord=26; _indent=1; _rowid='1946d7ff-dbad-479c-baa9-73192881840f'; _kind='stat'; _var='WEIGHTBL'; rowlabel='n'; _xx1='xx'; _xx2='xx'; _xx3='xx'; output;
  _ord=27; _indent=1; _rowid='d634cddf-5070-4490-b05b-2c25e35c958c'; _kind='stat'; _var='WEIGHTBL'; rowlabel='Mean (SD)'; _xx1='xx.xx (xx.xxx)'; _xx2='xx.xx (xx.xxx)'; _xx3='xx.xx (xx.xxx)'; output;
  _ord=28; _indent=1; _rowid='6ae106fa-2238-4fb1-a1b0-cfcaa01f14b7'; _kind='stat'; _var='WEIGHTBL'; rowlabel='Median'; _xx1='xx.xx'; _xx2='xx.xx'; _xx3='xx.xx'; output;
  _ord=29; _indent=1; _rowid='ba5cabc8-3c73-46aa-a2be-ef0f656810c8'; _kind='stat'; _var='WEIGHTBL'; rowlabel='Min, Max'; _xx1='xx.x, xx.x'; _xx2='xx.x, xx.x'; _xx3='xx.x, xx.x'; output;
  _ord=30; _indent=0; _rowid='blank-30'; _kind='blank'; _var=''; rowlabel=''; _xx1=''; _xx2=''; _xx3=''; output;
  _ord=31; _indent=0; _rowid='b5d53230-262b-4cce-8215-f69128ce6c9b'; _kind='label'; _var='BMIBL'; rowlabel='Baseline BMI (kg/m^2)'; _xx1=''; _xx2=''; _xx3=''; output;
  _ord=32; _indent=1; _rowid='182795ba-7e66-4254-9b93-2b9b6be61c0a'; _kind='stat'; _var='BMIBL'; rowlabel='n'; _xx1='xx'; _xx2='xx'; _xx3='xx'; output;
  _ord=33; _indent=1; _rowid='a25e072b-681d-406f-afa6-b9422b93c12b'; _kind='stat'; _var='BMIBL'; rowlabel='Mean (SD)'; _xx1='xx.xx (xx.xxx)'; _xx2='xx.xx (xx.xxx)'; _xx3='xx.xx (xx.xxx)'; output;
  _ord=34; _indent=1; _rowid='f678fb09-fa33-4d7b-ad17-551ca78a397f'; _kind='stat'; _var='BMIBL'; rowlabel='Median'; _xx1='xx.xx'; _xx2='xx.xx'; _xx3='xx.xx'; output;
  _ord=35; _indent=1; _rowid='e3e4770d-4e16-4cc3-aef0-1e6cdaf6f2a8'; _kind='stat'; _var='BMIBL'; rowlabel='Min, Max'; _xx1='xx.x, xx.x'; _xx2='xx.x, xx.x'; _xx3='xx.x, xx.x'; output;
run;

/*==== 10-data ====*/
/* Made from the output's analysis: the subjects of ADSL with ITTFL = 'Y', by TRT01P. */
data work._an;
  set adam.adsl(where=(ittfl = 'Y'));
  if trt01p in ('Standard of Care') then do; _col = 1; output; end;
  if trt01p in ('Clinwrightinib 200 mg') then do; _col = 2; output; end;
  _col = 3; output;
run;
data work._popc; set work._an(keep=usubjid _col); run;
data work._cols; do _col = 1 to 3; output; end; run;
%ls_bign(data=work._popc, trt=_col, values=1|2|3|1|2|3, names=_lsn1 _lsn2 _lsn3 _bign1 _bign2 _bign3);

/* Subjects and records per column. */
proc sort data=work._an(keep=usubjid _col) out=work._u; by _col usubjid; run;
data work._c;
  set work._u;
  by _col usubjid;
  retain _n _e;
  if first._col then do; _n = 0; _e = 0; end;
  _e = _e + 1;
  if first.usubjid then _n = _n + 1;
  if last._col then output;
  keep _col _n _e;
run;
proc transpose data=work._c out=work._tn(drop=_name_) prefix=_n; id _col; var _n; run;
proc transpose data=work._c out=work._te(drop=_name_) prefix=_e; id _col; var _e; run;
data work._z; _z = 1; run;
data work._g0;
  merge work._z work._tn work._te;
  array _nn{3} _n1-_n3;
  array _ee{3} _e1-_e3;
  do _i = 1 to 3; _nn{_i} = sum(_nn{_i}, 0); _ee{_i} = sum(_ee{_i}, 0); end;
  _tot = _n3;
  drop _i _z;
run;
/* n: n of AGE. */
data work._f; set work._g0; do _col = 1 to 3; output; end; run;
proc sort data=work._an(keep=_col age) out=work._m; by _col; run;
data work._m;
  set work._m;
  by _col;
  retain _vmiss _vnm;
  if first._col then do; _vmiss = 0; _vnm = 0; end;
  if missing(age) then _vmiss = _vmiss + 1; else _vnm = _vnm + 1;
  if last._col then output;
  keep _col _vmiss _vnm;
run;
data work._k1;
  length _rowid $36 _label _pagelbl $200 _v $200;
  merge work._f(in=_in) work._m;
  by _col;
  if _in;
  array _nn{3} _n1-_n3;
  array _ee{3} _e1-_e3;
  _rowid = '3be947a3-e998-4944-9961-07d6ea189de4';
  _page = 1;
  _pagelbl = '';
  _k0 = 2;
  _k1 = 0; _k2 = 0;
  _label = '';
  _v = strip(ifc(missing(sum(_vnm, 0)), '-', %ls_num(sum(_vnm, 0), 0)));
  keep _rowid _label _page _pagelbl _k0 _k1 _k2 _col _v;
run;
/* Mean (SD): mean_sd of AGE. */
data work._f; set work._g0; do _col = 1 to 3; output; end; run;
%ls_stats(data=work._an, out=work._st, var=age, trt=_col, keepraw=Y);
proc sort data=work._an(keep=_col age) out=work._m; by _col; run;
data work._m;
  set work._m;
  by _col;
  retain _vmiss _vnm;
  if first._col then do; _vmiss = 0; _vnm = 0; end;
  if missing(age) then _vmiss = _vmiss + 1; else _vnm = _vnm + 1;
  if last._col then output;
  keep _col _vmiss _vnm;
run;
data work._k2;
  length _rowid $36 _label _pagelbl $200 _v $200;
  merge work._f(in=_in) work._st work._m;
  by _col;
  if _in;
  array _nn{3} _n1-_n3;
  array _ee{3} _e1-_e3;
  _rowid = '9344f798-392d-49ae-b7f5-8ca74722454a';
  _page = 1;
  _pagelbl = '';
  _k0 = 3;
  _k1 = 0; _k2 = 0;
  _label = '';
  _v = strip(ifc(missing(_vmean), '-', %ls_num(_vmean, 1))) || ' (' || strip(ifc(missing(_vsd), '-', %ls_num(_vsd, 2))) || ')';
  keep _rowid _label _page _pagelbl _k0 _k1 _k2 _col _v;
run;
/* Median: median of AGE. */
data work._f; set work._g0; do _col = 1 to 3; output; end; run;
%ls_stats(data=work._an, out=work._st, var=age, trt=_col, keepraw=Y);
proc sort data=work._an(keep=_col age) out=work._m; by _col; run;
data work._m;
  set work._m;
  by _col;
  retain _vmiss _vnm;
  if first._col then do; _vmiss = 0; _vnm = 0; end;
  if missing(age) then _vmiss = _vmiss + 1; else _vnm = _vnm + 1;
  if last._col then output;
  keep _col _vmiss _vnm;
run;
data work._k3;
  length _rowid $36 _label _pagelbl $200 _v $200;
  merge work._f(in=_in) work._st work._m;
  by _col;
  if _in;
  array _nn{3} _n1-_n3;
  array _ee{3} _e1-_e3;
  _rowid = '685626ad-076d-4932-9ef3-b6cc6ad17ed1';
  _page = 1;
  _pagelbl = '';
  _k0 = 4;
  _k1 = 0; _k2 = 0;
  _label = '';
  _v = strip(ifc(missing(_vmedian), '-', %ls_num(_vmedian, 1)));
  keep _rowid _label _page _pagelbl _k0 _k1 _k2 _col _v;
run;
/* Min, Max: min_max of AGE. */
data work._f; set work._g0; do _col = 1 to 3; output; end; run;
%ls_stats(data=work._an, out=work._st, var=age, trt=_col, keepraw=Y);
proc sort data=work._an(keep=_col age) out=work._m; by _col; run;
data work._m;
  set work._m;
  by _col;
  retain _vmiss _vnm;
  if first._col then do; _vmiss = 0; _vnm = 0; end;
  if missing(age) then _vmiss = _vmiss + 1; else _vnm = _vnm + 1;
  if last._col then output;
  keep _col _vmiss _vnm;
run;
data work._k4;
  length _rowid $36 _label _pagelbl $200 _v $200;
  merge work._f(in=_in) work._st work._m;
  by _col;
  if _in;
  array _nn{3} _n1-_n3;
  array _ee{3} _e1-_e3;
  _rowid = '319164c0-40ad-46dc-8818-966a9c49c22a';
  _page = 1;
  _pagelbl = '';
  _k0 = 5;
  _k1 = 0; _k2 = 0;
  _label = '';
  _v = strip(ifc(missing(_vmin), '-', %ls_num(_vmin, 0))) || ', ' || strip(ifc(missing(_vmax), '-', %ls_num(_vmax, 0)));
  keep _rowid _label _page _pagelbl _k0 _k1 _k2 _col _v;
run;
/* Per value of agegr1: subjects and records per column. */
proc sort data=work._an(keep=usubjid _col agegr1 agegr1n where=(not missing(agegr1))) out=work._u; by agegr1 _col usubjid; run;
data work._c;
  set work._u;
  by agegr1 _col usubjid;
  retain _n _e;
  if first._col then do; _n = 0; _e = 0; end;
  _e = _e + 1;
  if first.usubjid then _n = _n + 1;
  if last._col then output;
  keep agegr1 agegr1n _col _n _e;
run;
proc transpose data=work._c out=work._tn(drop=_name_) prefix=_n; by agegr1 agegr1n; id _col; var _n; run;
proc transpose data=work._c out=work._te(drop=_name_) prefix=_e; by agegr1 agegr1n; id _col; var _e; run;
data work._g1;
  merge work._tn work._te; by agegr1 agegr1n;
  array _nn{3} _n1-_n3;
  array _ee{3} _e1-_e3;
  do _i = 1 to 3; _nn{_i} = sum(_nn{_i}, 0); _ee{_i} = sum(_ee{_i}, 0); end;
  _tot = _n3;
  drop _i;
run;
proc sort data=work._g1; by agegr1n agegr1; run;
data work._g1;
  set work._g1;
  _o1 = _n_;
run;
/* [Category]: npct of AGEGR1. */
data work._f; set work._g1; do _col = 1 to 3; output; end; run;
proc sort data=work._f; by agegr1 _col; run;
data work._k5;
  length _rowid $36 _label _pagelbl $200 _v $200;
  set work._f;
  array _nn{3} _n1-_n3;
  array _ee{3} _e1-_e3;
  _rowid = '433d7d88-74a0-444d-9184-7c94a585d9bc';
  _page = 1;
  _pagelbl = '';
  _k0 = 8;
  _k1 = _o1; _k2 = 0;
  _label = strip(agegr1);
  _v = strip(ifc(missing(_nn{_col}), '-', %ls_num(_nn{_col}, 0))) || ' (' || strip(ifc(missing(ifn(input(symget(cats('_lsn', _col)), 8.) > 0, 100 * _nn{_col} / max(input(symget(cats('_lsn', _col)), 8.), 1), .)), '-', %ls_num(ifn(input(symget(cats('_lsn', _col)), 8.) > 0, 100 * _nn{_col} / max(input(symget(cats('_lsn', _col)), 8.), 1), .), 1))) || '%)';
  keep _rowid _label _page _pagelbl _k0 _k1 _k2 _col _v;
run;
/* Per value of sex: subjects and records per column. */
proc sort data=work._an(keep=usubjid _col sex where=(not missing(sex))) out=work._u; by sex _col usubjid; run;
data work._c;
  set work._u;
  by sex _col usubjid;
  retain _n _e;
  if first._col then do; _n = 0; _e = 0; end;
  _e = _e + 1;
  if first.usubjid then _n = _n + 1;
  if last._col then output;
  keep sex _col _n _e;
run;
proc transpose data=work._c out=work._tn(drop=_name_) prefix=_n; by sex; id _col; var _n; run;
proc transpose data=work._c out=work._te(drop=_name_) prefix=_e; by sex; id _col; var _e; run;
data work._g2;
  merge work._tn work._te; by sex;
  array _nn{3} _n1-_n3;
  array _ee{3} _e1-_e3;
  do _i = 1 to 3; _nn{_i} = sum(_nn{_i}, 0); _ee{_i} = sum(_ee{_i}, 0); end;
  _tot = _n3;
  drop _i;
run;
proc sort data=work._g2; by  sex; run;
data work._g2;
  set work._g2;
  _o1 = _n_;
run;
/* [Category]: npct of SEX. */
data work._f; set work._g2; do _col = 1 to 3; output; end; run;
proc sort data=work._f; by sex _col; run;
data work._k6;
  length _rowid $36 _label _pagelbl $200 _v $200;
  set work._f;
  array _nn{3} _n1-_n3;
  array _ee{3} _e1-_e3;
  _rowid = '5ede580c-205f-40d1-a93c-b94b4b96d4d5';
  _page = 1;
  _pagelbl = '';
  _k0 = 11;
  _k1 = _o1; _k2 = 0;
  _label = strip(sex);
  _v = strip(ifc(missing(_nn{_col}), '-', %ls_num(_nn{_col}, 0))) || ' (' || strip(ifc(missing(ifn(input(symget(cats('_lsn', _col)), 8.) > 0, 100 * _nn{_col} / max(input(symget(cats('_lsn', _col)), 8.), 1), .)), '-', %ls_num(ifn(input(symget(cats('_lsn', _col)), 8.) > 0, 100 * _nn{_col} / max(input(symget(cats('_lsn', _col)), 8.), 1), .), 1))) || '%)';
  keep _rowid _label _page _pagelbl _k0 _k1 _k2 _col _v;
run;
/* Per value of race: subjects and records per column. */
proc sort data=work._an(keep=usubjid _col race racen where=(not missing(race))) out=work._u; by race _col usubjid; run;
data work._c;
  set work._u;
  by race _col usubjid;
  retain _n _e;
  if first._col then do; _n = 0; _e = 0; end;
  _e = _e + 1;
  if first.usubjid then _n = _n + 1;
  if last._col then output;
  keep race racen _col _n _e;
run;
proc transpose data=work._c out=work._tn(drop=_name_) prefix=_n; by race racen; id _col; var _n; run;
proc transpose data=work._c out=work._te(drop=_name_) prefix=_e; by race racen; id _col; var _e; run;
data work._g3;
  merge work._tn work._te; by race racen;
  array _nn{3} _n1-_n3;
  array _ee{3} _e1-_e3;
  do _i = 1 to 3; _nn{_i} = sum(_nn{_i}, 0); _ee{_i} = sum(_ee{_i}, 0); end;
  _tot = _n3;
  drop _i;
run;
proc sort data=work._g3; by racen race; run;
data work._g3;
  set work._g3;
  _o1 = _n_;
run;
/* [Category]: npct of RACE. */
data work._f; set work._g3; do _col = 1 to 3; output; end; run;
proc sort data=work._f; by race _col; run;
data work._k7;
  length _rowid $36 _label _pagelbl $200 _v $200;
  set work._f;
  array _nn{3} _n1-_n3;
  array _ee{3} _e1-_e3;
  _rowid = '6108d979-ca42-4a01-a91d-a44fa6f16189';
  _page = 1;
  _pagelbl = '';
  _k0 = 14;
  _k1 = _o1; _k2 = 0;
  _label = strip(race);
  _v = strip(ifc(missing(_nn{_col}), '-', %ls_num(_nn{_col}, 0))) || ' (' || strip(ifc(missing(ifn(input(symget(cats('_lsn', _col)), 8.) > 0, 100 * _nn{_col} / max(input(symget(cats('_lsn', _col)), 8.), 1), .)), '-', %ls_num(ifn(input(symget(cats('_lsn', _col)), 8.) > 0, 100 * _nn{_col} / max(input(symget(cats('_lsn', _col)), 8.), 1), .), 1))) || '%)';
  keep _rowid _label _page _pagelbl _k0 _k1 _k2 _col _v;
run;
/* Per value of ethnic: subjects and records per column. */
proc sort data=work._an(keep=usubjid _col ethnic where=(not missing(ethnic))) out=work._u; by ethnic _col usubjid; run;
data work._c;
  set work._u;
  by ethnic _col usubjid;
  retain _n _e;
  if first._col then do; _n = 0; _e = 0; end;
  _e = _e + 1;
  if first.usubjid then _n = _n + 1;
  if last._col then output;
  keep ethnic _col _n _e;
run;
proc transpose data=work._c out=work._tn(drop=_name_) prefix=_n; by ethnic; id _col; var _n; run;
proc transpose data=work._c out=work._te(drop=_name_) prefix=_e; by ethnic; id _col; var _e; run;
data work._g4;
  merge work._tn work._te; by ethnic;
  array _nn{3} _n1-_n3;
  array _ee{3} _e1-_e3;
  do _i = 1 to 3; _nn{_i} = sum(_nn{_i}, 0); _ee{_i} = sum(_ee{_i}, 0); end;
  _tot = _n3;
  drop _i;
run;
proc sort data=work._g4; by  ethnic; run;
data work._g4;
  set work._g4;
  _o1 = _n_;
run;
/* [Category]: npct of ETHNIC. */
data work._f; set work._g4; do _col = 1 to 3; output; end; run;
proc sort data=work._f; by ethnic _col; run;
data work._k8;
  length _rowid $36 _label _pagelbl $200 _v $200;
  set work._f;
  array _nn{3} _n1-_n3;
  array _ee{3} _e1-_e3;
  _rowid = '8defac8c-0f3e-4b80-b738-5a8bc79f79f4';
  _page = 1;
  _pagelbl = '';
  _k0 = 17;
  _k1 = _o1; _k2 = 0;
  _label = strip(ethnic);
  _v = strip(ifc(missing(_nn{_col}), '-', %ls_num(_nn{_col}, 0))) || ' (' || strip(ifc(missing(ifn(input(symget(cats('_lsn', _col)), 8.) > 0, 100 * _nn{_col} / max(input(symget(cats('_lsn', _col)), 8.), 1), .)), '-', %ls_num(ifn(input(symget(cats('_lsn', _col)), 8.) > 0, 100 * _nn{_col} / max(input(symget(cats('_lsn', _col)), 8.), 1), .), 1))) || '%)';
  keep _rowid _label _page _pagelbl _k0 _k1 _k2 _col _v;
run;
/* n: n of HEIGHTBL. */
data work._f; set work._g0; do _col = 1 to 3; output; end; run;
proc sort data=work._an(keep=_col heightbl) out=work._m; by _col; run;
data work._m;
  set work._m;
  by _col;
  retain _vmiss _vnm;
  if first._col then do; _vmiss = 0; _vnm = 0; end;
  if missing(heightbl) then _vmiss = _vmiss + 1; else _vnm = _vnm + 1;
  if last._col then output;
  keep _col _vmiss _vnm;
run;
data work._k9;
  length _rowid $36 _label _pagelbl $200 _v $200;
  merge work._f(in=_in) work._m;
  by _col;
  if _in;
  array _nn{3} _n1-_n3;
  array _ee{3} _e1-_e3;
  _rowid = 'a7a0e722-ce8b-4dd3-bed5-3566d146c287';
  _page = 1;
  _pagelbl = '';
  _k0 = 20;
  _k1 = 0; _k2 = 0;
  _label = '';
  _v = strip(ifc(missing(sum(_vnm, 0)), '-', %ls_num(sum(_vnm, 0), 0)));
  keep _rowid _label _page _pagelbl _k0 _k1 _k2 _col _v;
run;
/* Mean (SD): mean_sd of HEIGHTBL. */
data work._f; set work._g0; do _col = 1 to 3; output; end; run;
%ls_stats(data=work._an, out=work._st, var=heightbl, trt=_col, keepraw=Y);
proc sort data=work._an(keep=_col heightbl) out=work._m; by _col; run;
data work._m;
  set work._m;
  by _col;
  retain _vmiss _vnm;
  if first._col then do; _vmiss = 0; _vnm = 0; end;
  if missing(heightbl) then _vmiss = _vmiss + 1; else _vnm = _vnm + 1;
  if last._col then output;
  keep _col _vmiss _vnm;
run;
data work._k10;
  length _rowid $36 _label _pagelbl $200 _v $200;
  merge work._f(in=_in) work._st work._m;
  by _col;
  if _in;
  array _nn{3} _n1-_n3;
  array _ee{3} _e1-_e3;
  _rowid = '593f8965-bf5d-4569-afc6-e0d84554b799';
  _page = 1;
  _pagelbl = '';
  _k0 = 21;
  _k1 = 0; _k2 = 0;
  _label = '';
  _v = strip(ifc(missing(_vmean), '-', %ls_num(_vmean, 2))) || ' (' || strip(ifc(missing(_vsd), '-', %ls_num(_vsd, 3))) || ')';
  keep _rowid _label _page _pagelbl _k0 _k1 _k2 _col _v;
run;
/* Median: median of HEIGHTBL. */
data work._f; set work._g0; do _col = 1 to 3; output; end; run;
%ls_stats(data=work._an, out=work._st, var=heightbl, trt=_col, keepraw=Y);
proc sort data=work._an(keep=_col heightbl) out=work._m; by _col; run;
data work._m;
  set work._m;
  by _col;
  retain _vmiss _vnm;
  if first._col then do; _vmiss = 0; _vnm = 0; end;
  if missing(heightbl) then _vmiss = _vmiss + 1; else _vnm = _vnm + 1;
  if last._col then output;
  keep _col _vmiss _vnm;
run;
data work._k11;
  length _rowid $36 _label _pagelbl $200 _v $200;
  merge work._f(in=_in) work._st work._m;
  by _col;
  if _in;
  array _nn{3} _n1-_n3;
  array _ee{3} _e1-_e3;
  _rowid = 'fdcbf9bf-aa3a-4e35-b9aa-4086313ba1fa';
  _page = 1;
  _pagelbl = '';
  _k0 = 22;
  _k1 = 0; _k2 = 0;
  _label = '';
  _v = strip(ifc(missing(_vmedian), '-', %ls_num(_vmedian, 2)));
  keep _rowid _label _page _pagelbl _k0 _k1 _k2 _col _v;
run;
/* Min, Max: min_max of HEIGHTBL. */
data work._f; set work._g0; do _col = 1 to 3; output; end; run;
%ls_stats(data=work._an, out=work._st, var=heightbl, trt=_col, keepraw=Y);
proc sort data=work._an(keep=_col heightbl) out=work._m; by _col; run;
data work._m;
  set work._m;
  by _col;
  retain _vmiss _vnm;
  if first._col then do; _vmiss = 0; _vnm = 0; end;
  if missing(heightbl) then _vmiss = _vmiss + 1; else _vnm = _vnm + 1;
  if last._col then output;
  keep _col _vmiss _vnm;
run;
data work._k12;
  length _rowid $36 _label _pagelbl $200 _v $200;
  merge work._f(in=_in) work._st work._m;
  by _col;
  if _in;
  array _nn{3} _n1-_n3;
  array _ee{3} _e1-_e3;
  _rowid = 'b21aec76-83f9-47b3-90cf-fd2fa6a3fe64';
  _page = 1;
  _pagelbl = '';
  _k0 = 23;
  _k1 = 0; _k2 = 0;
  _label = '';
  _v = strip(ifc(missing(_vmin), '-', %ls_num(_vmin, 1))) || ', ' || strip(ifc(missing(_vmax), '-', %ls_num(_vmax, 1)));
  keep _rowid _label _page _pagelbl _k0 _k1 _k2 _col _v;
run;
/* n: n of WEIGHTBL. */
data work._f; set work._g0; do _col = 1 to 3; output; end; run;
proc sort data=work._an(keep=_col weightbl) out=work._m; by _col; run;
data work._m;
  set work._m;
  by _col;
  retain _vmiss _vnm;
  if first._col then do; _vmiss = 0; _vnm = 0; end;
  if missing(weightbl) then _vmiss = _vmiss + 1; else _vnm = _vnm + 1;
  if last._col then output;
  keep _col _vmiss _vnm;
run;
data work._k13;
  length _rowid $36 _label _pagelbl $200 _v $200;
  merge work._f(in=_in) work._m;
  by _col;
  if _in;
  array _nn{3} _n1-_n3;
  array _ee{3} _e1-_e3;
  _rowid = '1946d7ff-dbad-479c-baa9-73192881840f';
  _page = 1;
  _pagelbl = '';
  _k0 = 26;
  _k1 = 0; _k2 = 0;
  _label = '';
  _v = strip(ifc(missing(sum(_vnm, 0)), '-', %ls_num(sum(_vnm, 0), 0)));
  keep _rowid _label _page _pagelbl _k0 _k1 _k2 _col _v;
run;
/* Mean (SD): mean_sd of WEIGHTBL. */
data work._f; set work._g0; do _col = 1 to 3; output; end; run;
%ls_stats(data=work._an, out=work._st, var=weightbl, trt=_col, keepraw=Y);
proc sort data=work._an(keep=_col weightbl) out=work._m; by _col; run;
data work._m;
  set work._m;
  by _col;
  retain _vmiss _vnm;
  if first._col then do; _vmiss = 0; _vnm = 0; end;
  if missing(weightbl) then _vmiss = _vmiss + 1; else _vnm = _vnm + 1;
  if last._col then output;
  keep _col _vmiss _vnm;
run;
data work._k14;
  length _rowid $36 _label _pagelbl $200 _v $200;
  merge work._f(in=_in) work._st work._m;
  by _col;
  if _in;
  array _nn{3} _n1-_n3;
  array _ee{3} _e1-_e3;
  _rowid = 'd634cddf-5070-4490-b05b-2c25e35c958c';
  _page = 1;
  _pagelbl = '';
  _k0 = 27;
  _k1 = 0; _k2 = 0;
  _label = '';
  _v = strip(ifc(missing(_vmean), '-', %ls_num(_vmean, 2))) || ' (' || strip(ifc(missing(_vsd), '-', %ls_num(_vsd, 3))) || ')';
  keep _rowid _label _page _pagelbl _k0 _k1 _k2 _col _v;
run;
/* Median: median of WEIGHTBL. */
data work._f; set work._g0; do _col = 1 to 3; output; end; run;
%ls_stats(data=work._an, out=work._st, var=weightbl, trt=_col, keepraw=Y);
proc sort data=work._an(keep=_col weightbl) out=work._m; by _col; run;
data work._m;
  set work._m;
  by _col;
  retain _vmiss _vnm;
  if first._col then do; _vmiss = 0; _vnm = 0; end;
  if missing(weightbl) then _vmiss = _vmiss + 1; else _vnm = _vnm + 1;
  if last._col then output;
  keep _col _vmiss _vnm;
run;
data work._k15;
  length _rowid $36 _label _pagelbl $200 _v $200;
  merge work._f(in=_in) work._st work._m;
  by _col;
  if _in;
  array _nn{3} _n1-_n3;
  array _ee{3} _e1-_e3;
  _rowid = '6ae106fa-2238-4fb1-a1b0-cfcaa01f14b7';
  _page = 1;
  _pagelbl = '';
  _k0 = 28;
  _k1 = 0; _k2 = 0;
  _label = '';
  _v = strip(ifc(missing(_vmedian), '-', %ls_num(_vmedian, 2)));
  keep _rowid _label _page _pagelbl _k0 _k1 _k2 _col _v;
run;
/* Min, Max: min_max of WEIGHTBL. */
data work._f; set work._g0; do _col = 1 to 3; output; end; run;
%ls_stats(data=work._an, out=work._st, var=weightbl, trt=_col, keepraw=Y);
proc sort data=work._an(keep=_col weightbl) out=work._m; by _col; run;
data work._m;
  set work._m;
  by _col;
  retain _vmiss _vnm;
  if first._col then do; _vmiss = 0; _vnm = 0; end;
  if missing(weightbl) then _vmiss = _vmiss + 1; else _vnm = _vnm + 1;
  if last._col then output;
  keep _col _vmiss _vnm;
run;
data work._k16;
  length _rowid $36 _label _pagelbl $200 _v $200;
  merge work._f(in=_in) work._st work._m;
  by _col;
  if _in;
  array _nn{3} _n1-_n3;
  array _ee{3} _e1-_e3;
  _rowid = 'ba5cabc8-3c73-46aa-a2be-ef0f656810c8';
  _page = 1;
  _pagelbl = '';
  _k0 = 29;
  _k1 = 0; _k2 = 0;
  _label = '';
  _v = strip(ifc(missing(_vmin), '-', %ls_num(_vmin, 1))) || ', ' || strip(ifc(missing(_vmax), '-', %ls_num(_vmax, 1)));
  keep _rowid _label _page _pagelbl _k0 _k1 _k2 _col _v;
run;
/* n: n of BMIBL. */
data work._f; set work._g0; do _col = 1 to 3; output; end; run;
proc sort data=work._an(keep=_col bmibl) out=work._m; by _col; run;
data work._m;
  set work._m;
  by _col;
  retain _vmiss _vnm;
  if first._col then do; _vmiss = 0; _vnm = 0; end;
  if missing(bmibl) then _vmiss = _vmiss + 1; else _vnm = _vnm + 1;
  if last._col then output;
  keep _col _vmiss _vnm;
run;
data work._k17;
  length _rowid $36 _label _pagelbl $200 _v $200;
  merge work._f(in=_in) work._m;
  by _col;
  if _in;
  array _nn{3} _n1-_n3;
  array _ee{3} _e1-_e3;
  _rowid = '182795ba-7e66-4254-9b93-2b9b6be61c0a';
  _page = 1;
  _pagelbl = '';
  _k0 = 32;
  _k1 = 0; _k2 = 0;
  _label = '';
  _v = strip(ifc(missing(sum(_vnm, 0)), '-', %ls_num(sum(_vnm, 0), 0)));
  keep _rowid _label _page _pagelbl _k0 _k1 _k2 _col _v;
run;
/* Mean (SD): mean_sd of BMIBL. */
data work._f; set work._g0; do _col = 1 to 3; output; end; run;
%ls_stats(data=work._an, out=work._st, var=bmibl, trt=_col, keepraw=Y);
proc sort data=work._an(keep=_col bmibl) out=work._m; by _col; run;
data work._m;
  set work._m;
  by _col;
  retain _vmiss _vnm;
  if first._col then do; _vmiss = 0; _vnm = 0; end;
  if missing(bmibl) then _vmiss = _vmiss + 1; else _vnm = _vnm + 1;
  if last._col then output;
  keep _col _vmiss _vnm;
run;
data work._k18;
  length _rowid $36 _label _pagelbl $200 _v $200;
  merge work._f(in=_in) work._st work._m;
  by _col;
  if _in;
  array _nn{3} _n1-_n3;
  array _ee{3} _e1-_e3;
  _rowid = 'a25e072b-681d-406f-afa6-b9422b93c12b';
  _page = 1;
  _pagelbl = '';
  _k0 = 33;
  _k1 = 0; _k2 = 0;
  _label = '';
  _v = strip(ifc(missing(_vmean), '-', %ls_num(_vmean, 2))) || ' (' || strip(ifc(missing(_vsd), '-', %ls_num(_vsd, 3))) || ')';
  keep _rowid _label _page _pagelbl _k0 _k1 _k2 _col _v;
run;
/* Median: median of BMIBL. */
data work._f; set work._g0; do _col = 1 to 3; output; end; run;
%ls_stats(data=work._an, out=work._st, var=bmibl, trt=_col, keepraw=Y);
proc sort data=work._an(keep=_col bmibl) out=work._m; by _col; run;
data work._m;
  set work._m;
  by _col;
  retain _vmiss _vnm;
  if first._col then do; _vmiss = 0; _vnm = 0; end;
  if missing(bmibl) then _vmiss = _vmiss + 1; else _vnm = _vnm + 1;
  if last._col then output;
  keep _col _vmiss _vnm;
run;
data work._k19;
  length _rowid $36 _label _pagelbl $200 _v $200;
  merge work._f(in=_in) work._st work._m;
  by _col;
  if _in;
  array _nn{3} _n1-_n3;
  array _ee{3} _e1-_e3;
  _rowid = 'f678fb09-fa33-4d7b-ad17-551ca78a397f';
  _page = 1;
  _pagelbl = '';
  _k0 = 34;
  _k1 = 0; _k2 = 0;
  _label = '';
  _v = strip(ifc(missing(_vmedian), '-', %ls_num(_vmedian, 2)));
  keep _rowid _label _page _pagelbl _k0 _k1 _k2 _col _v;
run;
/* Min, Max: min_max of BMIBL. */
data work._f; set work._g0; do _col = 1 to 3; output; end; run;
%ls_stats(data=work._an, out=work._st, var=bmibl, trt=_col, keepraw=Y);
proc sort data=work._an(keep=_col bmibl) out=work._m; by _col; run;
data work._m;
  set work._m;
  by _col;
  retain _vmiss _vnm;
  if first._col then do; _vmiss = 0; _vnm = 0; end;
  if missing(bmibl) then _vmiss = _vmiss + 1; else _vnm = _vnm + 1;
  if last._col then output;
  keep _col _vmiss _vnm;
run;
data work._k20;
  length _rowid $36 _label _pagelbl $200 _v $200;
  merge work._f(in=_in) work._st work._m;
  by _col;
  if _in;
  array _nn{3} _n1-_n3;
  array _ee{3} _e1-_e3;
  _rowid = 'e3e4770d-4e16-4cc3-aef0-1e6cdaf6f2a8';
  _page = 1;
  _pagelbl = '';
  _k0 = 35;
  _k1 = 0; _k2 = 0;
  _label = '';
  _v = strip(ifc(missing(_vmin), '-', %ls_num(_vmin, 1))) || ', ' || strip(ifc(missing(_vmax), '-', %ls_num(_vmax, 1)));
  keep _rowid _label _page _pagelbl _k0 _k1 _k2 _col _v;
run;

data work._cells; set work._k1 work._k2 work._k3 work._k4 work._k5 work._k6 work._k7 work._k8 work._k9 work._k10 work._k11 work._k12 work._k13 work._k14 work._k15 work._k16 work._k17 work._k18 work._k19 work._k20; run;
proc sort data=work._cells; by _page _pagelbl _k0 _k1 _k2 _rowid _label _col; run;
proc transpose data=work._cells out=work._wide(drop=_name_) prefix=col;
  by _page _pagelbl _k0 _k1 _k2 _rowid _label;
  id _col;
  var _v;
run;
proc sort data=work._wide; by _rowid; run;
proc sort data=work._shell(drop=_page _pagelbl) out=work._rows; by _rowid; run;
data work._inst;
  merge work._wide(in=_w) work._rows(in=_s);
  by _rowid;
  if _w and _s;
  if _label ne '' then rowlabel = _label;
run;
data work._fixed;
  set work._shell;
  if _rowid not in ('3be947a3-e998-4944-9961-07d6ea189de4' '9344f798-392d-49ae-b7f5-8ca74722454a' '685626ad-076d-4932-9ef3-b6cc6ad17ed1' '319164c0-40ad-46dc-8818-966a9c49c22a' '433d7d88-74a0-444d-9184-7c94a585d9bc' '5ede580c-205f-40d1-a93c-b94b4b96d4d5' '6108d979-ca42-4a01-a91d-a44fa6f16189' '8defac8c-0f3e-4b80-b738-5a8bc79f79f4' 'a7a0e722-ce8b-4dd3-bed5-3566d146c287' '593f8965-bf5d-4569-afc6-e0d84554b799' 'fdcbf9bf-aa3a-4e35-b9aa-4086313ba1fa' 'b21aec76-83f9-47b3-90cf-fd2fa6a3fe64' '1946d7ff-dbad-479c-baa9-73192881840f' 'd634cddf-5070-4490-b05b-2c25e35c958c' '6ae106fa-2238-4fb1-a1b0-cfcaa01f14b7' 'ba5cabc8-3c73-46aa-a2be-ef0f656810c8' '182795ba-7e66-4254-9b93-2b9b6be61c0a' 'a25e072b-681d-406f-afa6-b9422b93c12b' 'f678fb09-fa33-4d7b-ad17-551ca78a397f' 'e3e4770d-4e16-4cc3-aef0-1e6cdaf6f2a8');
  _k0 = _ord; _k1 = 0; _k2 = 0;
run;
data work.final;
  length col1 col2 col3 $200 _pagelbl $200;
  set work._inst work._fixed;
run;
proc sort data=work.final; by _page _k0 _k1 _k2; run;
data work.final;
  set work.final;
  _ord = _n_;
  keep _page _pagelbl _ord _indent _rowid _kind rowlabel col1 col2 col3;
run;

/*==== 90-report ====*/
/* 90-report: from the shell; the titles, columns, headers and footnotes are not changed here. */
%ls_need(_bign1 _bign2 _bign3);
%ls_final_check(columns=_page _pagelbl _ord _indent _rowid _kind rowlabel col1 col2 col3);
proc sort data=work.final out=work._report; by _page _ord; run;
data work._report;
  set work._report;
  /* Two spaces per step of indentation: the label column keeps leading spaces (asis=on). */
  if _indent > 0 then rowlabel = repeat(' ', 2 * _indent - 1) || rowlabel;
run;
%let _lspaged = 0;
proc sql noprint; select count(*) into :_lspaged trimmed from work._report where _pagelbl ne ''; quit;

options orientation=portrait;
ods listing close;
ods rtf file="/work/out/t-14-1-2.rtf" style=journal;
title1 j=l "ONCO-EX" j=r "Page ~{thispage} of ~{lastpage}";
title2 j=c "Table 14.1.2";
title3 j=c "Demographic and Baseline Characteristics";
title4 j=c "Intent-to-Treat Analysis Set";
footnote1 j=l "Percentages are of the subjects in each column.";
footnote2 j=l "Source: ADSL.";
footnote3 j=l "Program: t-14-1-2.sas";
%macro _ls_report;
proc report data=work._report nowd split='|' missing style(report)={width=100%};
  column _page _pagelbl _ord _indent _kind rowlabel col1 col2 col3;
  define _page / order order=internal noprint;
  define _pagelbl / order noprint;
  define _ord / order order=internal noprint;
  define _indent / display noprint;
  define _kind / display noprint;
  define rowlabel / display "" style(column)={cellwidth=40% asis=on} style(header)={just=l};
  define col1 / display "Standard of Care|(N=&_bign1.)" style(column)={cellwidth=20% just=c} style(header)={just=c};
  define col2 / display "Clinwrightinib 200 mg|(N=&_bign2.)" style(column)={cellwidth=20% just=c} style(header)={just=c};
  define col3 / display "Total|(N=&_bign3.)" style(column)={cellwidth=20% just=c} style(header)={just=c};
  %if &_lspaged > 0 %then %do;
  compute before _pagelbl / style={just=l};
    line _pagelbl $200.;
  endcomp;
  %end;
  break after _page / page;
run;
%mend _ls_report;
%_ls_report;
ods rtf close;
ods listing;
%ls_final_export;