Clinwright Public work of Clinwright examples · free Start free

ADSL

Subject-Level Analysis

SUBJECT LEVEL ANALYSIS DATASET · one record per subject · keys USUBJID

Variables

VariableLabelTypeLengthDerivation
STUDYIDStudy IdentifiertextPredecessor DM.STUDYID
USUBJIDUnique Subject IdentifiertextPredecessor DM.USUBJID
SUBJIDSubject Identifier for the StudytextPredecessor DM.SUBJID
SITEIDStudy Site IdentifiertextPredecessor DM.SITEID
SITEGR1Pooled Site Group 1textRefer to SAP, Section 7.1. If not pooled then SITEGR1=SITEID. If pooled, SITEGR1 will be 900
ARMDescription of Planned ArmtextPredecessor DM.ARM
TRT01PPlanned Treatment for Period 01textPredecessor DM.ARM
TRT01PNPlanned Treatment for Period 01 (N)integer8Numeric code for TRT01P which corresponds to the randomized dose
TRT01AActual Treatment for Period 01textTRT01A=TRT01P, i.e., no difference between actual and randomized treatment in this study.
TRT01ANActual Treatment for Period 01 (N)integer8Numeric code for TRT01A which corresponds to the randomized dose
TRTSDTDate of First Exposure to Treatmentinteger8SV.SVSTDTC when SV.VISITNUM=3, converted to SAS date
TRTEDTDate of Last Exposure to Treatmentinteger8The date of final dose (from the CRF) is EX.EXENDTC on the subject's last EX record. If the date of final dose is missing for the subject and the subject discontinued after visit 3, use the date of discontinuation as the date of last dose. Convert the date to a SAS date.
TRTDURDTotal Treatment Duration (Days)integer8TRTEDT-TRTSDT+1
AVGDDAvg Daily Dose (as planned)float8CUMDOSE/TRTDURD
CUMDOSECumulative Dose (as planned)float8For ARMN=0 or 1: CUMDOSE=TRT01PN*TRTDURD. --- For ARMN=2: CUMDOSE will be based on 54mg per day for the # of days subj was in 1st dosing interval (i.e., visit4date-TRTSTDT+1 if 1st interval completed, TRTEDT-TRTSTDT+1 if subj discontinued <=visit 4 and > visit 3), 81mg per day for the # of days subj was in 2nd dosing interval (i.e., visit12date-visit4date if 2nd interval completed, TRTEDT-visit4date if subj discontinued <= visit 12 and > visit 4), and 54mg per day for the # of days subj was in 3rd dosing interval (i.e., TRTEDT - visit12date if subj continued after visit 12).
AGEAgeinteger8Predecessor DM.AGE
AGEGR1Pooled Age Group 1textCharacter variable derived from ADSL.AGEGR1N
AGEGR1NPooled Age Group 1 (N)integer8AGEGR1 = 1 if AGE <65. AGEGR1 = 2 if AGE 65-80. AGEGR1 = 3 if AGE >80.
AGEUAge UnitstextPredecessor DM.AGEU
RACERacetextPredecessor DM.RACE
RACENRace (N)integer8Numeric code for RACE
SEXSextextPredecessor DM.SEX
ETHNICEthnicitytextPredecessor DM.ETHNIC
SAFFLSafety Population FlagtextY if ITTFL='Y' and TRTSDT ne missing. N otherwise
ITTFLIntent-To-Treat Population FlagtextY if ARMCD ne ' '. N otherwise
EFFFLEfficacy Population FlagtextY if SAFFL='Y AND subject has at least one record in QS for ADAS-Cog with VISITNUM>3 AND at least one record in QS for CIBIC+ with VISITNUM>3. N otherwise
COMP8FLCompleters of Week 8 Population FlagtextY if subject has a SV.VISITNUM=8 and ENDDT >= date of visit 8, N otherwise
COMP16FLCompleters of Week 16 Population FlagtextY if subject has a SV.VISITNUM=10 and ENDDT>=date of visit 10, N otherwise
COMP24FLCompleters of Week 24 Population FlagtextY if subject has a SV.VISITNUM=12 and ENDDT>= date of visit 12 , N otherwise
DISCONFLDid the Subject Discontinue the Study?textY if EOSSTT='DISCONTINUED'. Null otherwise
DSRAEFLDiscontinued due to AE?textY if DCSREAS='Adverse Event'. Null otherwise
DTHFLSubject Died?textPredecessor DM.DTHFL
BMIBLBaseline BMI (kg/m^2)float8WEIGHTBL / ((HEIGHTBL*100)**2)
BMIBLGR1Pooled Baseline BMI Group 1textBMIBLGR1=Normal if . < BMIBL <25. BMIBLGR1=Overweight if 25 <=BMIBL <30. BMIBLGR1=Obese if BMIBL >=30.
HEIGHTBLBaseline Height (cm)float8VSSTRESN when VS.VSTESTCD='HEIGHT' and VS.VISITNUM=1
WEIGHTBLBaseline Weight (kg)float8VSSTRESN when VS.VSTESTCD='WEIGHT' and VS.VISITNUM=3
EDUCLVLYears of Educationinteger8SC.SCSTRESN where SC.SCTESTCD=YEARSEDU
DISONSDTDate of Onset of Diseaseinteger8MH.MHSTDTC where MHCAT='PRIMARY DIAGNOSIS' converted to SAS date
DURDISDuration of Disease (Months)float8number of months between VISIT1DT and DISONSET
DURDSGR1Pooled Disease Duration Group 1textgrouping DURDIS values as <12 and >=12
VISIT1DTDate of Visit 1integer8SV.SVSTDTC when SV.VISITNUM=1, converted to SAS date
RFSTDTCSubject Reference Start Date/TimedatetimePredecessor DM.RFSTDTC
RFENDTCSubject Reference End Date/TimedatetimePredecessor DM.RFENDTC
VISNUMENEnd of Trt Visit (Vis 12 or Early Term.)integer8if DS.VISITNUM=13 where DSTERM='PROTCOL COMPLETED' then VISNUMEN=12, otherwise VISNUMEN=DS.VISITNUM where DSTERM='PROTCOL COMPLETED'
RFENDTDate of Discontinuation/Completioninteger8RFENDTC converted to SAS date
DCDECODStandardized Disposition TermtextDS.DSDECOD where DSCAT='DISPOSITION EVENT'
EOSSTTEnd of Study StatustextCOMPLETED if ADSL.DCDECOD='COMPLETED'. DISCONTINUED if ADSL.DCDECOD not equal to COMPLETED.
DCSREASReason for Discontinuation from StudytextGrouping of DCDECOD values to support summarizing study completion status and reason for discontinuation
MMSETOTMMSE Totalinteger8Sum of QS.QSSTRESN for the subject, where QSCAT = 'MINI-MENTAL STATE'.

Program adsl.sas

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

/*==== 00-header ====*/
/*----------------------------------------------------------------------------
  Data set : ADSL (Subject-Level Analysis)
  Reporting effort : CSR
  The header and the finalize step follow from the specification.
----------------------------------------------------------------------------*/
libname sdtm "/work/sdtm" access=readonly;
libname adam "/work/adam";
options validvarname=upcase nofmterr msglevel=i;

/*==== 10-inputs ====*/
/* One record per subject of DM assigned an arm (not a screen failure: ARMCD neither SCRNFAIL nor NOTASSGN), with DM's variables. */
data work._ds;
  set sdtm.dm(where=(upcase(armcd) not in ('SCRNFAIL', 'NOTASSGN', '')));
  length trt01p $200;
  trt01p = arm;
run;
/* TRT01A: DM.ARM. */
data work._ds;
  set work._ds;
  length trt01a $200;
  trt01a = arm;
run;

/* TRTSDT: SV.SVSTDTC of the subject's first SV record where VISITNUM=3. */
proc sort data=sdtm.sv(where=(VISITNUM=3)) out=work._trtsdt;
  by usubjid svstdtc;
run;
data work._trtsdt(keep=usubjid trtsdt);
  set work._trtsdt;
  by usubjid;
  if first.usubjid;

  trtsdt = input(substr(svstdtc, 1, 10), ?? yymmdd10.);
  format trtsdt date9.;

run;
data work._ds;
  merge work._ds(in=_in) work._trtsdt;
  by usubjid;
  if _in;
run;

/* HEIGHTBL: VS.VSSTRESN of the subject's first VS record where VSTESTCD='HEIGHT' and VISITNUM=1. */
proc sort data=sdtm.vs(where=(VSTESTCD='HEIGHT' and VISITNUM=1)) out=work._heightbl;
  by usubjid ;
run;
data work._heightbl(keep=usubjid heightbl);
  set work._heightbl;
  by usubjid;
  if first.usubjid;

  heightbl = vsstresn;

run;
data work._ds;
  merge work._ds(in=_in) work._heightbl;
  by usubjid;
  if _in;
run;

/* HEIGHTBL as the data set keeps it, for what is derived from it. */
data work._ds; set work._ds; if not missing(heightbl) then heightbl = round(heightbl, 1e-1); run;

/* WEIGHTBL: VS.VSSTRESN of the subject's first VS record where VSTESTCD='WEIGHT' and VISITNUM=3. */
proc sort data=sdtm.vs(where=(VSTESTCD='WEIGHT' and VISITNUM=3)) out=work._weightbl;
  by usubjid ;
run;
data work._weightbl(keep=usubjid weightbl);
  set work._weightbl;
  by usubjid;
  if first.usubjid;

  weightbl = vsstresn;

run;
data work._ds;
  merge work._ds(in=_in) work._weightbl;
  by usubjid;
  if _in;
run;

/* WEIGHTBL as the data set keeps it, for what is derived from it. */
data work._ds; set work._ds; if not missing(weightbl) then weightbl = round(weightbl, 1e-1); run;

/* EDUCLVL: SC.SCSTRESN of the subject's first SC record where SCTESTCD = 'EDLEVEL'. */
proc sort data=sdtm.sc(where=(SCTESTCD = 'EDLEVEL')) out=work._educlvl;
  by usubjid ;
run;
data work._educlvl(keep=usubjid educlvl);
  set work._educlvl;
  by usubjid;
  if first.usubjid;

  educlvl = scstresn;

run;
data work._ds;
  merge work._ds(in=_in) work._educlvl;
  by usubjid;
  if _in;
run;

/* DISONSDT: MH.MHSTDTC of the subject's first MH record where MHCAT='PRIMARY DIAGNOSIS'. */
proc sort data=sdtm.mh(where=(MHCAT='PRIMARY DIAGNOSIS')) out=work._disonsdt;
  by usubjid mhstdtc;
run;
data work._disonsdt(keep=usubjid disonsdt);
  set work._disonsdt;
  by usubjid;
  if first.usubjid;

  disonsdt = input(substr(mhstdtc, 1, 10), ?? yymmdd10.);
  format disonsdt date9.;

run;
data work._ds;
  merge work._ds(in=_in) work._disonsdt;
  by usubjid;
  if _in;
run;

/* VISIT1DT: SV.SVSTDTC of the subject's first SV record where VISITNUM=1. */
proc sort data=sdtm.sv(where=(VISITNUM=1)) out=work._visit1dt;
  by usubjid svstdtc;
run;
data work._visit1dt(keep=usubjid visit1dt);
  set work._visit1dt;
  by usubjid;
  if first.usubjid;

  visit1dt = input(substr(svstdtc, 1, 10), ?? yymmdd10.);
  format visit1dt date9.;

run;
data work._ds;
  merge work._ds(in=_in) work._visit1dt;
  by usubjid;
  if _in;
run;

/* DCDECOD: DS.DSDECOD of the subject's first DS record where DSCAT='DISPOSITION EVENT'. */
proc sort data=sdtm.ds(where=(DSCAT='DISPOSITION EVENT')) out=work._dcdecod;
  by usubjid ;
run;
data work._dcdecod(keep=usubjid dcdecod);
  set work._dcdecod;
  by usubjid;
  if first.usubjid;

  dcdecod = dsdecod;

run;
data work._ds;
  merge work._ds(in=_in) work._dcdecod;
  by usubjid;
  if _in;
run;

/*==== 20-parameters ====*/
/* TRT01PN: the code of TRT01P. */
proc format;
  invalue trt01pn_ (upcase just)

    "PLACEBO" = 0

    "XANOMELINE LOW DOSE" = 54

    "XANOMELINE HIGH DOSE" = 81

    other = .;
run;
data work._ds;
  set work._ds;
  if trt01p ne '' then trt01pn = input(trt01p, trt01pn_.);
run;

/* TRT01AN: the code of TRT01A. */
proc format;
  invalue trt01an_ (upcase just)

    "PLACEBO" = 0

    "XANOMELINE LOW DOSE" = 54

    "XANOMELINE HIGH DOSE" = 81

    other = .;
run;
data work._ds;
  set work._ds;
  if trt01a ne '' then trt01an = input(trt01a, trt01an_.);
run;

/* RACEN: the code of RACE. */
proc format;
  invalue racen_ (upcase just)

    "WHITE" = 1

    "BLACK OR AFRICAN AMERICAN" = 2

    "AMERICAN INDIAN OR ALASKA NATIVE" = 6

    "ASIAN" = 7

    other = .;
run;
data work._ds;
  set work._ds;
  if race ne '' then racen = input(race, racen_.);
run;

/*==== 30-timing ====*/
/* TRTEDT: the last EX.EXENDTC of records where EXDOSE > 0 or (EXDOSE = 0 and (index(upcase(EXTRT), 'PLACEBO') > 0 or index(upcase(EXTRT), 'VEHICLE') > 0)); when the last record (by its start) has no end, the date of the disposition event. */
data work._ex;
  set sdtm.ex(where=(EXDOSE > 0 or (EXDOSE = 0 and (index(upcase(EXTRT), 'PLACEBO') > 0 or index(upcase(EXTRT), 'VEHICLE') > 0))));
  _st = input(substr(exstdtc, 1, 10), ?? yymmdd10.);
  _en = input(substr(exendtc, 1, 10), ?? yymmdd10.);
  if _st > . or _en > .;
  keep usubjid _st _en;
run;
proc sort data=work._ex; by usubjid _st _en; run;
proc sort data=sdtm.ds(where=(dscat = 'DISPOSITION EVENT')) out=work._dsend(keep=usubjid dsstdtc);
  by usubjid dsstdtc;
run;
data work._dsend(keep=usubjid _dsdt);
  set work._dsend;
  by usubjid;
  if last.usubjid;
  _dsdt = input(substr(dsstdtc, 1, 10), ?? yymmdd10.);
run;
data work._trtedt(keep=usubjid trtedt);
  merge work._ex(in=_e) work._dsend;
  by usubjid;
  if _e;
  retain _last;
  if first.usubjid then _last = .;
  _last = max(_last, coalesce(_en, _st));
  if last.usubjid then do;
    trtedt = ifn(_en = . and _dsdt > ., _dsdt, _last);
    output;
  end;
  format trtedt date9.;
run;

data work._ds;
  merge work._ds(in=_in) work._trtedt;
  by usubjid;
  if _in;
run;

/* TRTDURD: from TRTSDT to TRTEDT, in days, both days counted. */
data work._ds;
  set work._ds;
  if nmiss(trtsdt, trtedt) = 0 then trtdurd = (trtedt - trtsdt + 1);
run;

/* DURDIS: from DISONSDT to VISIT1DT, in months, both days counted. */
data work._ds;
  set work._ds;
  if nmiss(disonsdt, visit1dt) = 0 then durdis = (visit1dt - disonsdt + 1) / 30.4375;
run;

/* DURDIS as the data set keeps it, for what is derived from it. */
data work._ds; set work._ds; if not missing(durdis) then durdis = round(durdis, 1e-1); run;

/* RFENDT: DM.RFENDTC as a SAS date. */
data work._ds;
  set work._ds;
  length _dtc $10;
  _dtc = rfendtc; /* (its first 10 characters: SUBSTR would complain of a shorter variable) */
  if length(_dtc) = 10 then rfendt = input(_dtc, ?? yymmdd10.);

  format rfendt date9.;
  drop _dtc;
run;

/*==== 60-flags ====*/
/* SITEGR1: SITEID, or "900" for a site with fewer than 3 subjects in any TRT01P group. */
proc sql noprint;
  select count(distinct trt01p) into :_ls_groups trimmed from work._ds where not missing(trt01p);
  create table work._sitegr1 as
    select siteid, trt01p, count(*) as _n
    from work._ds
    where not missing(trt01p)
    group by siteid, trt01p
    order by siteid, trt01p;
quit;
data work._sitegr1(keep=siteid _pooled);
  set work._sitegr1;
  by siteid;
  retain _groups _few;
  if first.siteid then do;
    _groups = 0;
    _few = 0;
  end;
  _groups + 1;
  if _n < 3 then _few = 1;
  if last.siteid then do;
    _pooled = (_few or _groups < &_ls_groups);
    output;
  end;
run;
proc sort data=work._ds; by siteid; run;
data work._ds;
  merge work._ds(in=_in) work._sitegr1;
  by siteid;
  if _in;
  length sitegr1 $8;
  if _pooled then sitegr1 = "900";
  else sitegr1 = siteid;
  drop _pooled;
run;
proc sort data=work._ds; by usubjid; run;

/* CUMDOSE: the sum over EX records of EXDOSE times the record's days (EXSTDTC to EXENDTC, both counted; TRTEDT for a record without an end). */
proc sort data=sdtm.ex out=work._ex(keep=usubjid exdose exstdtc exendtc);
  by usubjid;
run;
data work._cumdose(keep=usubjid _dose);
  merge work._ds(in=_in keep=usubjid trtedt) work._ex(in=_ex);
  by usubjid;
  if _in and _ex;
  _st = input(substr(exstdtc, 1, 10), ?? yymmdd10.);
  _en = coalesce(input(substr(exendtc, 1, 10), ?? yymmdd10.), trtedt);
  if nmiss(_st, _en, exdose) = 0 and _en >= _st then _dose = exdose * (_en - _st + 1);
run;
proc means data=work._cumdose noprint nway;
  class usubjid;
  var _dose;
  output out=work._cumdose(keep=usubjid cumdose) sum=cumdose;
run;
data work._ds;
  merge work._ds(in=_in) work._cumdose;
  by usubjid;
  if _in;
run;

/* CUMDOSE as the data set keeps it, for what is derived from it. */
data work._ds; set work._ds; if not missing(cumdose) then cumdose = round(cumdose, 1e-1); run;

/* AGEGR1: the group of AGE. */
data work._ds;
  set work._ds;

  length agegr1 $40;

  if missing(age) then call missing(agegr1);

  else if age < 65 then agegr1 = "<65";

  else if age >= 65 and age <= 80 then agegr1 = "65-80";

  else if age > 80 then agegr1 = ">80";

run;

/* AGEGR1N: the group of AGE. */
data work._ds;
  set work._ds;

  if missing(age) then call missing(agegr1n);

  else if age < 65 then agegr1n = 1;

  else if age >= 65 and age <= 80 then agegr1n = 2;

  else if age > 80 then agegr1n = 3;

run;

/* ITTFL: Y if ARMCD ne ' '; otherwise N. */
data work._ds;
  set work._ds;
  length ittfl $1;
  if ARMCD ne ' ' then ittfl = 'Y';
  else ittfl = 'N';
run;

/* SAFFL: Y if ITTFL='Y' and not missing(TRTSDT); otherwise N. */
data work._ds;
  set work._ds;
  length saffl $1;
  if ITTFL='Y' and not missing(TRTSDT) then saffl = 'Y';
  else saffl = 'N';
run;

/* EFFFL: Y if the subject has a QS record where QSTEST = 'ADAS-COG(11) Subscore' and VISITNUM>3, and a QS record where QSCAT = 'CLINICIAN''S INTERVIEW-BASED IMPRESSION OF CHANGE (CIBIC+)' and VISITNUM>3, and SAFFL='Y'. */
proc sort data=sdtm.qs(where=(QSTEST = 'ADAS-COG(11) Subscore' and VISITNUM>3)) out=work._efffl(keep=usubjid) nodupkey;
  by usubjid;
run;

proc sort data=sdtm.qs(where=(QSCAT = 'CLINICIAN''S INTERVIEW-BASED IMPRESSION OF CHANGE (CIBIC+)' and VISITNUM>3)) out=work._efffl2(keep=usubjid) nodupkey;
  by usubjid;
run;

data work._ds;
  merge work._ds(in=_in) work._efffl(in=_has) work._efffl2(in=_has2);
  by usubjid;
  if _in;
  length efffl $1;
  efffl = ifc(_has and _has2 and (SAFFL='Y'), 'Y', 'N');
run;

/* COMP8FL: Y if the subject has a SV record where VISITNUM=8. */
proc sort data=sdtm.sv(where=(VISITNUM=8)) out=work._comp8fl(keep=usubjid) nodupkey;
  by usubjid;
run;

data work._ds;
  merge work._ds(in=_in) work._comp8fl(in=_has);
  by usubjid;
  if _in;
  length comp8fl $1;
  comp8fl = ifc(_has, 'Y', 'N');
run;

/* COMP16FL: Y if the subject has a SV record where VISITNUM=10. */
proc sort data=sdtm.sv(where=(VISITNUM=10)) out=work._comp16fl(keep=usubjid) nodupkey;
  by usubjid;
run;

data work._ds;
  merge work._ds(in=_in) work._comp16fl(in=_has);
  by usubjid;
  if _in;
  length comp16fl $1;
  comp16fl = ifc(_has, 'Y', 'N');
run;

/* COMP24FL: Y if the subject has a SV record where VISITNUM=12. */
proc sort data=sdtm.sv(where=(VISITNUM=12)) out=work._comp24fl(keep=usubjid) nodupkey;
  by usubjid;
run;

data work._ds;
  merge work._ds(in=_in) work._comp24fl(in=_has);
  by usubjid;
  if _in;
  length comp24fl $1;
  comp24fl = ifc(_has, 'Y', 'N');
run;

/* BMIBL: WEIGHTBL / (HEIGHTBL/100)**2. */
data work._ds;
  set work._ds;
  if weightbl > 0 and heightbl > 0 then bmibl = weightbl / (heightbl / 100)**2;
run;

/* BMIBL as the data set keeps it, for what is derived from it. */
data work._ds; set work._ds; if not missing(bmibl) then bmibl = round(bmibl, 1e-1); run;

/* BMIBLGR1: the group of BMIBL. */
data work._ds;
  set work._ds;

  length bmiblgr1 $40;

  if missing(bmibl) then call missing(bmiblgr1);

  else if bmibl < 25 then bmiblgr1 = "<25";

  else if bmibl >= 25 and bmibl < 30 then bmiblgr1 = "25-<30";

  else if bmibl >= 30 then bmiblgr1 = ">=30";

run;

/* DURDSGR1: the group of DURDIS. */
data work._ds;
  set work._ds;

  length durdsgr1 $40;

  if missing(durdis) then call missing(durdsgr1);

  else if durdis < 12 then durdsgr1 = "<12";

  else if durdis >= 12 then durdsgr1 = ">=12";

run;

/* EOSSTT: from the subject's DS record where DSCAT = 'DISPOSITION EVENT'. */
/* The subject's last such event (a subject may have several). */
proc sort data=sdtm.ds(where=(dscat = 'DISPOSITION EVENT'))
          out=work._eosstt(keep=usubjid dsstdtc dsdecod);
  by usubjid dsstdtc;
run;
data work._eosstt(keep=usubjid _decod);
  set work._eosstt;
  by usubjid;
  if last.usubjid;
  _decod = dsdecod;
run;
data work._ds;
  merge work._ds(in=_in) work._eosstt;
  by usubjid;
  if _in;
  length eosstt $20;
  if _decod = 'COMPLETED' then eosstt = 'COMPLETED';
  else if _decod ne '' then eosstt = 'DISCONTINUED';
  else eosstt = 'ONGOING';
  drop _decod;
run;

/* DCSREAS: the reason the subject did not complete (DSDECOD of DSCAT = 'DISPOSITION EVENT'). */
/* The subject's last such event (a subject may have several). */
proc sort data=sdtm.ds(where=(dscat = 'DISPOSITION EVENT')) out=work._dcsreas(keep=usubjid dsstdtc dsdecod);
  by usubjid dsstdtc;
run;
data work._dcsreas(keep=usubjid dcsreas);
  set work._dcsreas;
  by usubjid;
  if last.usubjid and dsdecod ne 'COMPLETED';
  length dcsreas $200;

  select (upcase(dsdecod));

    when ("COMPLETED") dcsreas = "Completed";

    when ("ADVERSE EVENT") dcsreas = "Adverse Event";

    when ("DEATH") dcsreas = "Death";

    when ("I/E NOT MET") dcsreas = "I/E Not Met";

    when ("LACK OF EFFICACY") dcsreas = "Lack of Efficacy";

    when ("LOST TO FOLLOW-UP") dcsreas = "Lost to Follow-up";

    when ("PHYSICIAN DECISION") dcsreas = "Physician Decision";

    when ("PROTOCOL VIOLATION") dcsreas = "Protocol Violation";

    when ("SPONSOR DECISION") dcsreas = "Sponsor Decision";

    when ("WITHDREW CONSENT") dcsreas = "Withdrew Consent";

    when ("NON-COMPLIANCE WITH STUDY DRUG") dcsreas = "Completed";

    when ("PROTOCOL DEVIATION") dcsreas = "Protocol Violation";

    when ("SITE TERMINATED BY SPONSOR") dcsreas = "Sponsor Decision";

    when ("STUDY TERMINATED BY SPONSOR") dcsreas = "Sponsor Decision";

    when ("WITHDRAWAL BY PARENT/GUARDIAN") dcsreas = "Withdrew Consent";

    when ("WITHDRAWAL BY SUBJECT") dcsreas = "Withdrew Consent";

    otherwise dcsreas = dsdecod;
  end;

run;
data work._ds;
  merge work._ds(in=_in) work._dcsreas;
  by usubjid;
  if _in;
run;

/* MMSETOT: sum of QS.QSSTRESN where QSCAT = 'MINI-MENTAL STATE', by subject. */

proc means data=sdtm.qs(where=(QSCAT = 'MINI-MENTAL STATE')) noprint nway;
  class usubjid;
  var qsstresn;
  output out=work._mmsetot(keep=usubjid mmsetot) sum=mmsetot;
run;

data work._ds;
  merge work._ds(in=_in) work._mmsetot;
  by usubjid;
  if _in;
run;

/*==== 70-other ====*/
/* AVGDD = CUMDOSE/TRTDURD. */
data work._ds;
  set work._ds;
  if nmiss(cumdose, trtdurd) = 0 then avgdd = CUMDOSE/TRTDURD;
run;

/* VISNUMEN (End of Trt Visit (Vis 12 or Early Term.)): if DS.VISITNUM=13 where DSTERM='PROTCOL COMPLETED' then VISNUMEN=12, otherwise VISNUMEN=DS.VISITNUM where DSTERM='PROTCOL COMPLETED' -- to write. */

/* DISCONFL: Y if EOSSTT='DISCONTINUED'; Null otherwise. */
data work._ds;
  set work._ds;

  length disconfl $4;



  if EOSSTT='DISCONTINUED' then disconfl = "Y";



  else disconfl = "Null";


run;

/* DSRAEFL: Y if DCSREAS='Adverse Event'; Null otherwise. */
data work._ds;
  set work._ds;

  length dsraefl $4;



  if DCSREAS='Adverse Event' then dsraefl = "Y";



  else dsraefl = "Null";


run;

/*==== 89-final ====*/
/* The data set as derived; the finalize step keeps the specification's variables. */
data work._final;
  set work._ds;
run;

/*==== 90-finalize ====*/
/* 90-finalize: from the specification; the variables, their order and attributes are not changed here. */
/* The text variables the specification gives no length: as long as their longest value (at least 1). */
%let _len1 = 1; %let _len2 = 1; %let _len3 = 1; %let _len4 = 1; %let _len5 = 1; %let _len6 = 1; %let _len7 = 1; %let _len8 = 1; %let _len9 = 1; %let _len10 = 1; %let _len11 = 1; %let _len12 = 1; %let _len13 = 1; %let _len14 = 1; %let _len15 = 1; %let _len16 = 1; %let _len17 = 1; %let _len18 = 1; %let _len19 = 1; %let _len20 = 1; %let _len21 = 1; %let _len22 = 1; %let _len23 = 1; %let _len24 = 1; %let _len25 = 1; %let _len26 = 1; %let _len27 = 1; %let _len28 = 1; %let _len29 = 1;
data _null_;
  length _ren _asg _siz $32767;
  _dsid = open('work._final');
  if varnum(_dsid, 'STUDYID') > 0 then do; _ren = catx(' ', _ren, 'STUDYID=_rz1'); _asg = catx(' ', _asg, 'STUDYID = _rz1;');
    _siz = catx(' ', _siz, '_len1 = max(_len1, lengthn(STUDYID));'); end;
  if varnum(_dsid, 'USUBJID') > 0 then do; _ren = catx(' ', _ren, 'USUBJID=_rz2'); _asg = catx(' ', _asg, 'USUBJID = _rz2;');
    _siz = catx(' ', _siz, '_len2 = max(_len2, lengthn(USUBJID));'); end;
  if varnum(_dsid, 'SUBJID') > 0 then do; _ren = catx(' ', _ren, 'SUBJID=_rz3'); _asg = catx(' ', _asg, 'SUBJID = _rz3;');
    _siz = catx(' ', _siz, '_len3 = max(_len3, lengthn(SUBJID));'); end;
  if varnum(_dsid, 'SITEID') > 0 then do; _ren = catx(' ', _ren, 'SITEID=_rz4'); _asg = catx(' ', _asg, 'SITEID = _rz4;');
    _siz = catx(' ', _siz, '_len4 = max(_len4, lengthn(SITEID));'); end;
  if varnum(_dsid, 'SITEGR1') > 0 then do; _ren = catx(' ', _ren, 'SITEGR1=_rz5'); _asg = catx(' ', _asg, 'SITEGR1 = _rz5;');
    _siz = catx(' ', _siz, '_len5 = max(_len5, lengthn(SITEGR1));'); end;
  if varnum(_dsid, 'ARM') > 0 then do; _ren = catx(' ', _ren, 'ARM=_rz6'); _asg = catx(' ', _asg, 'ARM = _rz6;');
    _siz = catx(' ', _siz, '_len6 = max(_len6, lengthn(ARM));'); end;
  if varnum(_dsid, 'TRT01P') > 0 then do; _ren = catx(' ', _ren, 'TRT01P=_rz7'); _asg = catx(' ', _asg, 'TRT01P = _rz7;');
    _siz = catx(' ', _siz, '_len7 = max(_len7, lengthn(TRT01P));'); end;
  if varnum(_dsid, 'TRT01A') > 0 then do; _ren = catx(' ', _ren, 'TRT01A=_rz8'); _asg = catx(' ', _asg, 'TRT01A = _rz8;');
    _siz = catx(' ', _siz, '_len8 = max(_len8, lengthn(TRT01A));'); end;
  if varnum(_dsid, 'AGEGR1') > 0 then do; _ren = catx(' ', _ren, 'AGEGR1=_rz9'); _asg = catx(' ', _asg, 'AGEGR1 = _rz9;');
    _siz = catx(' ', _siz, '_len9 = max(_len9, lengthn(AGEGR1));'); end;
  if varnum(_dsid, 'AGEU') > 0 then do; _ren = catx(' ', _ren, 'AGEU=_rz10'); _asg = catx(' ', _asg, 'AGEU = _rz10;');
    _siz = catx(' ', _siz, '_len10 = max(_len10, lengthn(AGEU));'); end;
  if varnum(_dsid, 'RACE') > 0 then do; _ren = catx(' ', _ren, 'RACE=_rz11'); _asg = catx(' ', _asg, 'RACE = _rz11;');
    _siz = catx(' ', _siz, '_len11 = max(_len11, lengthn(RACE));'); end;
  if varnum(_dsid, 'SEX') > 0 then do; _ren = catx(' ', _ren, 'SEX=_rz12'); _asg = catx(' ', _asg, 'SEX = _rz12;');
    _siz = catx(' ', _siz, '_len12 = max(_len12, lengthn(SEX));'); end;
  if varnum(_dsid, 'ETHNIC') > 0 then do; _ren = catx(' ', _ren, 'ETHNIC=_rz13'); _asg = catx(' ', _asg, 'ETHNIC = _rz13;');
    _siz = catx(' ', _siz, '_len13 = max(_len13, lengthn(ETHNIC));'); end;
  if varnum(_dsid, 'SAFFL') > 0 then do; _ren = catx(' ', _ren, 'SAFFL=_rz14'); _asg = catx(' ', _asg, 'SAFFL = _rz14;');
    _siz = catx(' ', _siz, '_len14 = max(_len14, lengthn(SAFFL));'); end;
  if varnum(_dsid, 'ITTFL') > 0 then do; _ren = catx(' ', _ren, 'ITTFL=_rz15'); _asg = catx(' ', _asg, 'ITTFL = _rz15;');
    _siz = catx(' ', _siz, '_len15 = max(_len15, lengthn(ITTFL));'); end;
  if varnum(_dsid, 'EFFFL') > 0 then do; _ren = catx(' ', _ren, 'EFFFL=_rz16'); _asg = catx(' ', _asg, 'EFFFL = _rz16;');
    _siz = catx(' ', _siz, '_len16 = max(_len16, lengthn(EFFFL));'); end;
  if varnum(_dsid, 'COMP8FL') > 0 then do; _ren = catx(' ', _ren, 'COMP8FL=_rz17'); _asg = catx(' ', _asg, 'COMP8FL = _rz17;');
    _siz = catx(' ', _siz, '_len17 = max(_len17, lengthn(COMP8FL));'); end;
  if varnum(_dsid, 'COMP16FL') > 0 then do; _ren = catx(' ', _ren, 'COMP16FL=_rz18'); _asg = catx(' ', _asg, 'COMP16FL = _rz18;');
    _siz = catx(' ', _siz, '_len18 = max(_len18, lengthn(COMP16FL));'); end;
  if varnum(_dsid, 'COMP24FL') > 0 then do; _ren = catx(' ', _ren, 'COMP24FL=_rz19'); _asg = catx(' ', _asg, 'COMP24FL = _rz19;');
    _siz = catx(' ', _siz, '_len19 = max(_len19, lengthn(COMP24FL));'); end;
  if varnum(_dsid, 'DISCONFL') > 0 then do; _ren = catx(' ', _ren, 'DISCONFL=_rz20'); _asg = catx(' ', _asg, 'DISCONFL = _rz20;');
    _siz = catx(' ', _siz, '_len20 = max(_len20, lengthn(DISCONFL));'); end;
  if varnum(_dsid, 'DSRAEFL') > 0 then do; _ren = catx(' ', _ren, 'DSRAEFL=_rz21'); _asg = catx(' ', _asg, 'DSRAEFL = _rz21;');
    _siz = catx(' ', _siz, '_len21 = max(_len21, lengthn(DSRAEFL));'); end;
  if varnum(_dsid, 'DTHFL') > 0 then do; _ren = catx(' ', _ren, 'DTHFL=_rz22'); _asg = catx(' ', _asg, 'DTHFL = _rz22;');
    _siz = catx(' ', _siz, '_len22 = max(_len22, lengthn(DTHFL));'); end;
  if varnum(_dsid, 'BMIBLGR1') > 0 then do; _ren = catx(' ', _ren, 'BMIBLGR1=_rz23'); _asg = catx(' ', _asg, 'BMIBLGR1 = _rz23;');
    _siz = catx(' ', _siz, '_len23 = max(_len23, lengthn(BMIBLGR1));'); end;
  if varnum(_dsid, 'DURDSGR1') > 0 then do; _ren = catx(' ', _ren, 'DURDSGR1=_rz24'); _asg = catx(' ', _asg, 'DURDSGR1 = _rz24;');
    _siz = catx(' ', _siz, '_len24 = max(_len24, lengthn(DURDSGR1));'); end;
  if varnum(_dsid, 'RFSTDTC') > 0 then do; _ren = catx(' ', _ren, 'RFSTDTC=_rz25'); _asg = catx(' ', _asg, 'RFSTDTC = _rz25;');
    _siz = catx(' ', _siz, '_len25 = max(_len25, lengthn(RFSTDTC));'); end;
  if varnum(_dsid, 'RFENDTC') > 0 then do; _ren = catx(' ', _ren, 'RFENDTC=_rz26'); _asg = catx(' ', _asg, 'RFENDTC = _rz26;');
    _siz = catx(' ', _siz, '_len26 = max(_len26, lengthn(RFENDTC));'); end;
  if varnum(_dsid, 'DCDECOD') > 0 then do; _ren = catx(' ', _ren, 'DCDECOD=_rz27'); _asg = catx(' ', _asg, 'DCDECOD = _rz27;');
    _siz = catx(' ', _siz, '_len27 = max(_len27, lengthn(DCDECOD));'); end;
  if varnum(_dsid, 'EOSSTT') > 0 then do; _ren = catx(' ', _ren, 'EOSSTT=_rz28'); _asg = catx(' ', _asg, 'EOSSTT = _rz28;');
    _siz = catx(' ', _siz, '_len28 = max(_len28, lengthn(EOSSTT));'); end;
  if varnum(_dsid, 'DCSREAS') > 0 then do; _ren = catx(' ', _ren, 'DCSREAS=_rz29'); _asg = catx(' ', _asg, 'DCSREAS = _rz29;');
    _siz = catx(' ', _siz, '_len29 = max(_len29, lengthn(DCSREAS));'); end;
  _rc = close(_dsid);
  if _ren ne '' then _ren = cats('(rename=(', _ren, '))');
  call symputx('_ren', _ren);
  call symputx('_asg', _asg);
  call symputx('_siz', _siz);
run;
data _null_;
  set work._final end=_end;
  retain _len1 1 _len2 1 _len3 1 _len4 1 _len5 1 _len6 1 _len7 1 _len8 1 _len9 1 _len10 1 _len11 1 _len12 1 _len13 1 _len14 1 _len15 1 _len16 1 _len17 1 _len18 1 _len19 1 _len20 1 _len21 1 _len22 1 _len23 1 _len24 1 _len25 1 _len26 1 _len27 1 _len28 1 _len29 1;
  &_siz
  if _end then do;
    call symputx('_len1', _len1);
    call symputx('_len2', _len2);
    call symputx('_len3', _len3);
    call symputx('_len4', _len4);
    call symputx('_len5', _len5);
    call symputx('_len6', _len6);
    call symputx('_len7', _len7);
    call symputx('_len8', _len8);
    call symputx('_len9', _len9);
    call symputx('_len10', _len10);
    call symputx('_len11', _len11);
    call symputx('_len12', _len12);
    call symputx('_len13', _len13);
    call symputx('_len14', _len14);
    call symputx('_len15', _len15);
    call symputx('_len16', _len16);
    call symputx('_len17', _len17);
    call symputx('_len18', _len18);
    call symputx('_len19', _len19);
    call symputx('_len20', _len20);
    call symputx('_len21', _len21);
    call symputx('_len22', _len22);
    call symputx('_len23', _len23);
    call symputx('_len24', _len24);
    call symputx('_len25', _len25);
    call symputx('_len26', _len26);
    call symputx('_len27', _len27);
    call symputx('_len28', _len28);
    call symputx('_len29', _len29);
  end;
run;
data adam.adsl(label="Subject-Level Analysis");
  attrib
    STUDYID  length=$&_len1 label="Study Identifier"
    USUBJID  length=$&_len2 label="Unique Subject Identifier"
    SUBJID   length=$&_len3 label="Subject Identifier for the Study"
    SITEID   length=$&_len4 label="Study Site Identifier"
    SITEGR1  length=$&_len5 label="Pooled Site Group 1"
    ARM      length=$&_len6 label="Description of Planned Arm"
    TRT01P   length=$&_len7 label="Planned Treatment for Period 01"
    TRT01PN  length=8 label="Planned Treatment for Period 01 (N)"
    TRT01A   length=$&_len8 label="Actual Treatment for Period 01"
    TRT01AN  length=8 label="Actual Treatment for Period 01 (N)"
    TRTSDT   length=8 label="Date of First Exposure to Treatment" format=DATE9.
    TRTEDT   length=8 label="Date of Last Exposure to Treatment" format=DATE9.
    TRTDURD  length=8 label="Total Treatment Duration (Days)"
    AVGDD    length=8 label="Avg Daily Dose (as planned)"
    CUMDOSE  length=8 label="Cumulative Dose (as planned)"
    AGE      length=8 label="Age"
    AGEGR1   length=$&_len9 label="Pooled Age Group 1"
    AGEGR1N  length=8 label="Pooled Age Group 1 (N)"
    AGEU     length=$&_len10 label="Age Units"
    RACE     length=$&_len11 label="Race"
    RACEN    length=8 label="Race (N)"
    SEX      length=$&_len12 label="Sex"
    ETHNIC   length=$&_len13 label="Ethnicity"
    SAFFL    length=$&_len14 label="Safety Population Flag"
    ITTFL    length=$&_len15 label="Intent-To-Treat Population Flag"
    EFFFL    length=$&_len16 label="Efficacy Population Flag"
    COMP8FL  length=$&_len17 label="Completers of Week 8 Population Flag"
    COMP16FL length=$&_len18 label="Completers of Week 16 Population Flag"
    COMP24FL length=$&_len19 label="Completers of Week 24 Population Flag"
    DISCONFL length=$&_len20 label="Did the Subject Discontinue the Study?"
    DSRAEFL  length=$&_len21 label="Discontinued due to AE?"
    DTHFL    length=$&_len22 label="Subject Died?"
    BMIBL    length=8 label="Baseline BMI (kg/m^2)"
    BMIBLGR1 length=$&_len23 label="Pooled Baseline BMI Group 1"
    HEIGHTBL length=8 label="Baseline Height (cm)"
    WEIGHTBL length=8 label="Baseline Weight (kg)"
    EDUCLVL  length=8 label="Years of Education"
    DISONSDT length=8 label="Date of Onset of Disease" format=DATE9.
    DURDIS   length=8 label="Duration of Disease (Months)"
    DURDSGR1 length=$&_len24 label="Pooled Disease Duration Group 1"
    VISIT1DT length=8 label="Date of Visit 1" format=DATE9.
    RFSTDTC  length=$&_len25 label="Subject Reference Start Date/Time"
    RFENDTC  length=$&_len26 label="Subject Reference End Date/Time"
    VISNUMEN length=8 label="End of Trt Visit (Vis 12 or Early Term.)"
    RFENDT   length=8 label="Date of Discontinuation/Completion" format=DATE9.
    DCDECOD  length=$&_len27 label="Standardized Disposition Term"
    EOSSTT   length=$&_len28 label="End of Study Status"
    DCSREAS  length=$&_len29 label="Reason for Discontinuation from Study"
    MMSETOT  length=8 label="MMSE Total"
  ;
  set work._final&_ren;
  &_asg
  if not missing(AVGDD) then AVGDD = round(AVGDD, 1e-1);
  if not missing(CUMDOSE) then CUMDOSE = round(CUMDOSE, 1e-1);
  if not missing(BMIBL) then BMIBL = round(BMIBL, 1e-1);
  if not missing(HEIGHTBL) then HEIGHTBL = round(HEIGHTBL, 1e-1);
  if not missing(WEIGHTBL) then WEIGHTBL = round(WEIGHTBL, 1e-1);
  if not missing(DURDIS) then DURDIS = round(DURDIS, 1e-1);
  keep STUDYID USUBJID SUBJID SITEID SITEGR1 ARM TRT01P TRT01PN TRT01A TRT01AN TRTSDT TRTEDT TRTDURD AVGDD CUMDOSE AGE AGEGR1 AGEGR1N AGEU RACE RACEN SEX ETHNIC SAFFL ITTFL EFFFL COMP8FL COMP16FL COMP24FL DISCONFL DSRAEFL DTHFL BMIBL BMIBLGR1 HEIGHTBL WEIGHTBL EDUCLVL DISONSDT DURDIS DURDSGR1 VISIT1DT RFSTDTC RFENDTC VISNUMEN RFENDT DCDECOD EOSSTT DCSREAS MMSETOT;
run;
proc sort data=adam.adsl; by USUBJID; run;

Data (first 20 of 254 records, uploaded)

STUDYIDUSUBJIDSUBJIDSITEIDSITEGR1ARMTRT01PTRT01PNTRT01ATRT01ANTRTSDTTRTEDTTRTDURDAVGDDCUMDOSEAGEAGEGR1AGEGR1NAGEURACERACENSEXETHNICSAFFLITTFLEFFFLCOMP8FLCOMP16FLCOMP24FLDISCONFLDSRAEFLDTHFLBMIBLBMIBLGR1HEIGHTBLWEIGHTBLEDUCLVLDISONSDTDURDISDURDSGR1VISIT1DTRFSTDTCRFENDTCVISNUMENRFENDTDCDECODEOSSTTDCSREASMMSETOT
CDISCPILOT0101-701-10151015701701PlaceboPlacebo0Placebo02014-01-022014-07-021820063<651YEARSWHITE1FHISPANIC OR LATINOYYYYYYNullNull25.125-<30147.354.4162010-04-3043.9>=122013-12-262014-01-022014-07-022014-07-02COMPLETEDCOMPLETED23
CDISCPILOT0101-701-10231023701701PlaceboPlacebo0Placebo02012-08-052012-09-01280064<651YEARSWHITE1MHISPANIC OR LATINOYYYNNNYY30.4>=30162.680.3142006-03-1176.4>=122012-07-222012-08-052012-09-022012-09-02ADVERSE EVENTDISCONTINUEDAdverse Event23
CDISCPILOT0101-701-10281028701701Xanomeline High DoseXanomeline High Dose81Xanomeline High Dose812013-07-192014-01-1418077.7139867165-802YEARSWHITE1MNOT HISPANIC OR LATINOYYYYYYNullNull31.4>=30177.899.3162009-12-1642.8>=122013-07-112013-07-192014-01-142014-01-14COMPLETEDCOMPLETED23
CDISCPILOT0101-701-10331033701701Xanomeline Low DoseXanomeline Low Dose54Xanomeline Low Dose542014-03-182014-03-3114547567465-802YEARSWHITE1MNOT HISPANIC OR LATINOYYYNNNYNull28.825-<30175.388.5122009-08-0255.3>=122014-03-102014-03-182014-04-142014-04-14STUDY TERMINATED BY SPONSORDISCONTINUEDSponsor Decision23
CDISCPILOT0101-701-10341034701701Xanomeline High DoseXanomeline High Dose81Xanomeline High Dose812014-07-012014-12-3018376.9140677765-802YEARSWHITE1FNOT HISPANIC OR LATINOYYYYYYNullNull26.125-<30154.962.692011-09-2932.9>=122014-06-242014-07-012014-12-302014-12-30COMPLETEDCOMPLETED21
CDISCPILOT0101-701-10471047701701PlaceboPlacebo0Placebo02013-02-122013-03-09260085>803YEARSWHITE1FNOT HISPANIC OR LATINOYYYNNNYY30.4>=30148.667.182009-07-2642>=122013-01-222013-02-122013-03-292013-03-29ADVERSE EVENTDISCONTINUEDAdverse Event23
CDISCPILOT0101-701-10971097701701Xanomeline Low DoseXanomeline Low Dose54Xanomeline Low Dose542014-01-012014-07-0919054102606865-802YEARSWHITE1MNOT HISPANIC OR LATINOYYYYYYNullNull27.325-<30168.978182005-09-2299.1>=122013-12-232014-01-012014-07-092014-07-09COMPLETEDCOMPLETED10
CDISCPILOT0101-701-11111111701701Xanomeline Low DoseXanomeline Low Dose54Xanomeline Low Dose542012-09-072012-09-16105454081>803YEARSWHITE1FNOT HISPANIC OR LATINOYYYNNNYY23.9<25158.259.9222009-04-0440.7>=122012-08-252012-09-072012-09-172012-09-17ADVERSE EVENTDISCONTINUEDAdverse Event23
CDISCPILOT0101-701-11151115701701Xanomeline Low DoseXanomeline Low Dose54Xanomeline Low Dose542012-11-302013-01-235554297084>803YEARSWHITE1MNOT HISPANIC OR LATINOYYYYNNYY23.9<25181.678.9122004-05-28101.9>=122012-11-232012-11-302013-01-232013-01-23ADVERSE EVENTDISCONTINUEDAdverse Event20
CDISCPILOT0101-701-11181118701701PlaceboPlacebo0Placebo02014-03-122014-09-091820052<651YEARSWHITE1MNOT HISPANIC OR LATINOYYYYYYNullNull21.9<25180.371.2142010-06-2444.2>=122014-02-272014-03-122014-09-092014-09-09COMPLETEDCOMPLETED20
CDISCPILOT0101-701-11301130701701PlaceboPlacebo0Placebo02014-02-152014-08-161830084>803YEARSWHITE1MNOT HISPANIC OR LATINOYYYYYYNullNull27.625-<30169.779.4122010-05-2244.7>=122014-02-092014-02-152014-08-162014-08-16COMPLETEDCOMPLETED19
CDISCPILOT0101-701-11331133701701Xanomeline High DoseXanomeline High Dose81Xanomeline High Dose812012-10-282013-04-2818377.21412181>803YEARSWHITE1FNOT HISPANIC OR LATINOYYYYYYNullNull28.125-<30162.674.4102010-03-1131.5>=122012-10-232012-10-282013-04-292013-04-29COMPLETEDCOMPLETED21
CDISCPILOT0101-701-11461146701701Xanomeline High DoseXanomeline High Dose81Xanomeline High Dose812013-05-202013-06-263870.326737565-802YEARSWHITE1FNOT HISPANIC OR LATINOYYYNNNYY24.9<25147.354162009-11-1741.7>=122013-05-072013-05-202013-06-302013-06-30ADVERSE EVENTDISCONTINUEDAdverse Event22
CDISCPILOT0101-701-11481148701701Xanomeline High DoseXanomeline High Dose81Xanomeline High Dose812013-08-232014-02-2018277.11404057<651YEARSWHITE1MNOT HISPANIC OR LATINOYYYYYYNullNull28.325-<30175.387.1152010-12-1232.1>=122013-08-142013-08-232014-02-202014-02-20COMPLETEDCOMPLETED21
CDISCPILOT0101-701-11531153701701PlaceboPlacebo0Placebo02013-09-232014-03-16175007965-802YEARSWHITE1FNOT HISPANIC OR LATINOYYYYYYNullNull23.8<25156.258.162005-05-1399.8>=122013-09-062013-09-232014-04-012014-04-01COMPLETEDCOMPLETED10
CDISCPILOT0101-701-11801180701701Xanomeline High DoseXanomeline High Dose81Xanomeline High Dose812013-02-122013-03-183570.2245756<651YEARSWHITE1MNOT HISPANIC OR LATINOYYYNNNYY27.625-<30180.389.8162008-09-2152.3>=122013-01-282013-02-122013-03-232013-03-23ADVERSE EVENTDISCONTINUEDAdverse Event19
CDISCPILOT0101-701-11811181701701Xanomeline High DoseXanomeline High Dose81Xanomeline High Dose812013-12-052013-12-095542707965-802YEARSWHITE1FNOT HISPANIC OR LATINOYYYNNNYY27.825-<30154.966.7152008-08-2663>=122013-11-262013-12-052013-12-122013-12-12ADVERSE EVENTDISCONTINUEDAdverse Event10
CDISCPILOT0101-701-11881188701701Xanomeline Low DoseXanomeline Low Dose54Xanomeline Low Dose542013-02-152013-03-24385420527165-802YEARSWHITE1MNOT HISPANIC OR LATINOYYYNNNYY32>=30177.8101.2162005-09-1488.7>=122013-02-032013-02-152013-03-252013-03-25ADVERSE EVENTDISCONTINUEDAdverse Event23
CDISCPILOT0101-701-11921192701701Xanomeline Low DoseXanomeline Low Dose54Xanomeline Low Dose542012-07-222013-01-201835498828065-802YEARSWHITE1FNOT HISPANIC OR LATINOYYYYYYNullNull27.825-<30151.163.5122009-03-1539.8>=122012-07-082012-07-222013-01-202013-01-20COMPLETEDCOMPLETED23
CDISCPILOT0101-701-12031203701701PlaceboPlacebo0Placebo02013-02-022013-08-031830081>803YEARSBLACK OR AFRICAN AMERICAN2FNOT HISPANIC OR LATINOYYYYYYNullNull25.925-<3016066.2132011-04-1921.3>=122013-01-252013-02-022013-08-032013-08-03COMPLETEDCOMPLETED21