0% found this document useful (0 votes)
31 views6 pages

AE

Uploaded by

madhurimulli2020
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as TXT, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
31 views6 pages

AE

Uploaded by

madhurimulli2020
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as TXT, PDF, TXT or read online on Scribd
You are on page 1/ 6

/*---------------------------------------------------------------------*

Study Number :
Study :
Program Name : AE
Purpose : Craeting Adverse Event Domain
Author : xxxxxxx
Date of Creation : DDMMM2024
Input Data :
Output : SDTM.AE
Assumptions : Taken from xxx
--------------------------------------------------------------------------
Modification History :
--------------------------------------------------------------------------
Modified By : xxxx
Modification Date :
Modification Description :
---------------------------------------------------------------------------*/

dm "log" clear;

proc datasets lib=work memtype=data kill;


quit;

options validvarname=upcase;

/* To bring Rawdatasets */

libname raw "E:\C DATA\my data DUSKTOP\Desktop\Altryx Solution\A3_8am\Raw


datasets";

/* To store final output dataset*/

libname sdtm "E:\C DATA\my data DUSKTOP\Desktop\Altryx Solution\A3_8am\outputs";

option validvarname = upcase;

/* Getting DM data */

data dm(keep=usubjid rfstdtc rfendtc rficdtc rfxstdtc rfxendtc);


set sdtm.dm;
run;
proc sort data=dm; by usubjid; run;

/* Getting AE Raw data */

data ae1(rename=(aeterm_=aeterm aeser_=aeser aesev_=aesev));


length aeterm_ $200. aeser_ $1. aesev_ $20. usubjid aespid $30.;
set raw.ae;

domain = "AE";
studyid = strip(project);

if subjid ne "" then usubjid = catx("-",project,sitenumber,subjid);


else usubjid = catx("-",project,sitenumber,subject);

if subjid ne "" then aespid = catx("-",sitenumber,subjid);


else usubjid = catx("-",sitenumber,subject);
aeterm_ = strip(aeterm);

AELLT = strip(mdrllt);
AELLTCD = input(mdrlltc,best.);
AEDECOD = strip(mdrpt);
AEPTCD = input(mdrptc,best.);
AEHLT = strip(mdrhlt);
AEHLTCD = input(mdrhltc,best.);
AEHLGT = strip(mdrhlgt);
AEHLGTCD = input(mdrhlgtc,best.);
AEBODSYS = strip(mdrsoc);
AEBDSYCD = input(mdrsocc,best.);
AESOC = strip(mdrsoc);
AESOCCD = input(mdrsocc,best.);
AESEV_ = strip(AESEV);/* Apply Standard Control Terminology */
AESER_ = strip(AESER_STD);
AEACN = strip(AEACN);
AEREL = strip(AEREL_STD);

/* if AESER_ = "Y" and S_AEACNH_RAW = "1" then aeshosp = "Y"; /* For supporting
AESER Variable */

AEACNOTH = ""; /* Combine all other actions that are to be condoser */

if S_AEACNH =1 then aeshosp="Y";


else aeshosp="N";

if S_AEACNM =1 then AECONTRT="Y";


else AECONTRT="N";

if AEONGO = 1 then AEENRTPT = "ONGOING";

drop aeterm aeser aesev ;

run;
proc sort data=ae1; by usubjid; run;

/* Merging both AE and DM Datasets */

data aedm;
merge ae1(in=a) dm(in=b);
by usubjid;
if a;

if AESTDT_YY ne . and AESTDT_MM ne . and AESTDT_DD ne . then aestdtc =


catx("-",strip(put(AESTDT_YY,best.)),strip(put(AESTDT_MM,z2.)),strip(put(AESTDT_DD,
z2.)));

if AEENDT_YY ne . and AEENDT_MM ne . and AEENDT_DD ne . then aeendtc =


catx("-",strip(put(AEENDT_YY,best.)),strip(put(AEENDT_MM,z2.)),strip(put(AEENDT_DD,
z2.)));

rfstdtc_n = input(rfstdtc,yymmdd10.);
if aestdtc ne "" then aestdtc_n = input(substr(aestdtc,1,10),yymmdd10.);
if aeendtc ne "" then aeendtc_n = input(substr(aeendtc,1,10),yymmdd10.);
if rfstdtc_n ne . and aestdtc_n ne . then do;
if aestdtc_n >= rfstdtc_n then aestdy = (aestdtc_n - rfstdtc_n)+1;
else aestdy = (aestdtc_n - rfstdtc_n);
end;

if rfstdtc_n ne . and aeendtc_n ne . then do;


if aeendtc_n >= rfstdtc_n then aeendy = (aeendtc_n - rfstdtc_n)+1;
else aeendy = (aeendtc_n - rfstdtc_n);
end;

if rficdtc ne "" then aeentpt = rficdtc;

if aestdtc ge rfstdtc then tretmfl = "Y";

run;

/* Deriving EPOCH */

data epoch;
set aedm;

if aestdtc ne "" then do;


if (RFXSTDTC = "") or (aestdtc < RFXSTDTC) then EPOCH = "SCREENING";
else if (RFXSTDTC <= aestdtc <= RFXENDTC) and RFXENDTC ^= "" then EPOCH
= "TREATMENT";
else if aestdtc > RFXSTDTC and RFXENDTC = "" then EPOCH = "TREATMENT";
else if aestdtc > RFXENDTC and RFXENDTC ^= "" then EPOCH = "FOLLOW-UP";
end;

if aeterm ne "" ;

run;

proc sort data=epoch; by usubjid aeterm aestdtc; run;

/* Generating SEQ */

data seq;
set epoch;
by usubjid aeterm aestdtc;

if first.usubjid then aeseq = 1;


else aeseq+1;
run;

/* Final Dataset creation */

data sdtm.ae(label="Adverse Events");

retain STUDYID DOMAIN USUBJID AESEQ AESPID AETERM AELLT AELLTCD AEDECOD
AEPTCD AEHLT AEHLTCD AEHLGT AEHLGTCD AEBODSYS AEBDSYCD AESOC AESOCCD AESEV
AESER AEACN AEACNOTH AEREL AESHOSP AECONTRT EPOCH AESTDTC AEENDTC AESTDY AEENDY
AEENRTPT AEENTPT ;

keep STUDYID DOMAIN USUBJID AESEQ AESPID AETERM AELLT AELLTCD AEDECOD AEPTCD
AEHLT AEHLTCD AEHLGT AEHLGTCD AEBODSYS AEBDSYCD AESOC AESOCCD AESEV
AESER AEACN AEACNOTH AEREL AESHOSP AECONTRT EPOCH AESTDTC AEENDTC AESTDY AEENDY
AEENRTPT AEENTPT ;

attrib STUDYID label ='Study Identifier' length = $15


DOMAIN label ='Domain Abbreviation' length = $2
USUBJID label ='Unique Subject Identifier' length = $30
AESEQ label ='Sequence Number' length = 8
AESPID label ='Sponsor-Defined Identifier' length = $30
AETERM label ='Reported Term for the Adverse Event' length =
$200
AELLT label ='Lowest Level Term' length = $200
AELLTCD label ='Lowest Level Term Code' length = 8
AEDECOD label ='Dictionary-Derived Term' length = $200
AEPTCD label ='Preferred Term Code' length = 8
AEHLT label ='High Level Term' length = $200
AEHLTCD label ='High Level Term Code' length = 8
AEHLGT label ='High Level Group Term' length = $200
AEHLGTCD label ='High Level Group Term Code' length = 8
AEBODSYS label ='Body System or Organ Class' length = $200
AEBDSYCD label ='Body System or Organ Class Code' length = 8
AESOC label ='Primary System Organ Class' length = $200
AESOCCD label ='Primary System Organ Class Code' length = 8
AESEV label ='Severity/Intensity' length = $20
AESER label ='Serious Event' length = $1
AEACN label ='Action Taken with Study Treatment' length = $48
AEACNOTH label ='Other Action Taken' length = $200
AEREL label ='Causality' length = $11
AESHOSP label ='Requires or Prolongs Hospitalization' length =
$1
AECONTRT label ='Concomitant or Additional Trtmnt Given' length
= $1
EPOCH label ='Epoch' length = $30
AESTDTC label ='Start Date/Time of Adverse Event' length = $20
AEENDTC label ='End Date/Time of Adverse Event' length = $20
AESTDY label ='Study Day of Start of Adverse Event' length = 8
AEENDY label ='Study Day of End of Adverse Event' length = 8
AEENRTPT label ='End Relative to Reference Time Point' length =
$8
AEENTPT label ='End Reference Time Point' length = $20;

set seq;

run;

/* Libname for .XPT conversion of sas dataset*/

libname xpt xport "E:\C DATA\my data DUSKTOP\Desktop\Altryx Solution\A3_8am\xpt\


ae.xpt";

proc copy in = sdtm out = xpt;


select ae;
run;

/* SUPPAE Dataset */

data supp;
set seq;
d_ver = strip(diction)||""||strip(dic_ver);
keep studyid usubjid aeseq tretmfl s_aerelp_std d_ver;
run;

proc sort data = supp out = supp_;


by studyid usubjid aeseq;
run;

proc transpose data =supp_ out = supp_t;


by studyid usubjid aeseq;
var tretmfl s_aerelp_std d_ver;
run;

data supp_fin;
length qorig $40.;
set supp_t;

rdomain = "AE" ;
idvar = "AESEQ" ;
idvarval = strip(put(aeseq,best.));

if _name_ = "TRETMFL" then do;


qnam = "AETRTEM";
qlabel = "Treatment Emergent Flag";
qval = strip(col1);
qorig = "Derived";
qeval = "";
output;
end;

if _name_ = "S_AERELP_STD" then do;


qnam = "S_AERELP";
qlabel = "Related to Study Procedures";
qval = strip(col1);
qorig = "CRF Page";
qeval = "";
output;
end;

if _name_ = "D_VER" then do;


qnam = "AEDICVER";
qlabel = "Standard AE Term Dict Ver";
qval = strip(col1);
qorig = "Derived, eDT";
qeval = "";
output;
end;

if qval ne "" ;

run;

/* Final SUPPAE creation */

data sdtm.suppae(label="Supplementary for Adverse Events");


retain STUDYID RDOMAIN USUBJID IDVAR IDVARVAL QNAM QLABEL QVAL QORIG QEVAL;

keep STUDYID RDOMAIN USUBJID IDVAR IDVARVAL QNAM QLABEL QVAL QORIG QEVAL;
attrib STUDYID label ='Study Identifier' length = $14
RDOMAIN label ='Related Domain Abbreviation' length = $2
USUBJID label ='Unique Subject Identifier' length = $30
IDVAR label ='Identifying Variable' length = $8
IDVARVAL label ='Identifying Variable Value' length = $200
QNAM label ='Qualifier Variable Name' length = $8
QLABEL label ='Qualifier Variable Label' length = $40
QVAL label ='Data Value' length = $200
QORIG label ='Origin' length = $40
QEVAL label ='Evaluator' length = $40;
;

set supp_fin;
run;

/* Convert final dataset into xpt format */

libname xpt xport"E:\C DATA\my data DUSKTOP\Desktop\Altryx Solution\A3_8am\xpt\


suppae.xpt";

proc copy in = sdtm out = xpt memtype=data;


select suppae;
run;

/*proc printto log = "E:\C DATA\my data DUSKTOP\Desktop\Altryx Solution\A3_8am\log\


aelog.txt" new;*/

********************** End of Program ******************************;

You might also like