You are on page 1of 6

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

Study Number :
Study :
Program Name : DS
Purpose : Craeting Disposition Domain
Author : xxxxxxx
Date of Creation : DDMMM2024
Input Data :
Output : SDTM.DS
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";

/* Final Variables in Dataset */

option validvarname = upcase;

/* Usubjid Macro creation */

%macro usubjid (out=,in=);


data &out;
set raw.∈
if subjid ne "" then usubjid = catx("-",project,sitenumber,subjid);
else usubjid = catx("-",project,sitenumber,scrnid);
run;
%mend usubjid;

%usubjid (in=ds_ic, out=ic1);


%usubjid (in=death, out=death1);
%usubjid (in=scrfail, out=scrfail_);
%usubjid (in=enroll, out=enroll_);

/* Inform consent Obtained */

data ic2;
set ic1;
dsspid = catx("-",sitenumber,scrnid,subjid);
dscat = "PROTOCOL MILESTONE";
dsscat = "";
dsterm = "INFORMED CONSENT OBTAINED";
dsdecod = "INFORMED CONSENT OBTAINED";

if S_ICDT ne . then dsstdtc = put(datepart(S_ICDT),yymmdd10.);


dsdtc = dsstdtc;

run;

/* Death Records*/

data death2;
set death1;
dsspid = catx("-",sitenumber,scrnid,subjid);

if DEATHDT_RAW ne "" then do;

dscat = "DISPOSITION EVENT";


dsscat = "DEATH";
dsterm = strip(DEATHCAU);
dsdecod = "DEATH";

if DEATHDT ne . then dsstdtc = put(datepart(DEATHDT),yymmdd10.);


dsdtc = dsstdtc;
end;
run;

/* Screening */

data scrfail1;
set scrfail_;
dsspid = catx("-",sitenumber,scrnid,subjid);

if XFREAS ne "" then dsterm = strip(XFREAS);


else dsterm = "SCREEN FAILURE";
dsdecod = "SCREEN FAILURE";
dscat = "DISPOSITION EVENT";
dsscat = "SCREENING";

if RECORDDATE ne . then dsstdtc = put(datepart(RECORDDATE),yymmdd10.);


dsdtc = dsstdtc;

run;

/* Enrolled */

data enroll1;
set enroll_;
dsspid = catx("-",sitenumber,scrnid,subjid);
dsterm = "ENROLLED";
dsdecod = "ENROLLED";
dscat = "PROTOCOL MILESTONE";
dsscat = "ENROLLMENT";

if RECORDDATE ne . then dsstdtc = put(datepart(RECORDDATE),yymmdd10.);


dsdtc = dsstdtc;
run;

/* Completion status of treatment*/

/* Completion status of study(follow-up)*/

/* Setting all datasets */

data ds1;
length dsterm $200. dsscat $30. ;
set ic2 death2 scrfail1 enroll1;
run;

proc sort data=ds1; by usubjid; run;

/* Getting DM Data */

proc sort data=sdtm.dm out=dm1; by usubjid; run;

data ds2;
merge ds1(in=a) dm1(in=b drop=siteid);
by usubjid;
if a;

rfstdtc_n = input(rfstdtc,yymmdd10.);
if dsstdtc ne "" then dsstdtc_n = input(dsstdtc,yymmdd10.);

if rfstdtc_n ne . and dsstdtc_n ne . then do;


if dsstdtc_n >= rfstdtc_n then dsstdy = (dsstdtc_n - rfstdtc_n)+1;
else dsstdy = (dsstdtc_n - rfstdtc_n);
end;

dsdy = dsstdy;
run;

/* Deriving EPOCH */

data epoch;
set ds2;

if dsstdtc ne "" then do;


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

data ds3;
set epoch;

if dscat = "PROTOCOL MILESTONE" then epoch = "";


if dscat = "DISPOSITION EVENT" and dsscat = "SCREENING" then epoch =
"SCREENING";
if dsterm ne "" ;
run;

proc sort data=ds3;


by usubjid dsstdtc dsdecod;
run;

/* SEQ creation */

data fin;
set ds3;
by usubjid dsstdtc dsdecod;

if first.usubjid then dsseq = 1;


else dsseq+1;

domain = "DS";
studyid = "GS-US-322-0206";
run;

/* Final Dataset Creation */

data sdtm.ds(label="Disposition");

retain STUDYID DOMAIN USUBJID DSSEQ DSSPID DSTERM DSDECOD DSCAT DSSCAT EPOCH
DSDTC DSSTDTC DSDY DSSTDY;

keep STUDYID DOMAIN USUBJID DSSEQ DSSPID DSTERM DSDECOD DSCAT DSSCAT EPOCH
DSDTC DSSTDTC DSDY DSSTDY;

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


DOMAIN label ='Domain Abbreviation' length = $2
USUBJID label ='Unique Subject Identifier' length = $30
DSSEQ label ='Sequence Number' length = 8
DSSPID label ='Sponsor-Defined Identifier' length = $30
DSTERM label ='Reported Term for the Disposition Event' length = $200
DSDECOD label ='Standardized Disposition Term' length = $200
DSCAT label ='Category for Disposition Event' length = $20
DSSCAT label ='Subcategory for Disposition Event' length = $30
EPOCH label= 'Epoch' length =$200
DSDTC label ='Date/Time of Collection' length = $20
DSSTDTC label ='Start Date/Time of Disposition Event' length = $20
DSDY label='Study Day of Collection' length = 8
DSSTDY label ='Study Day of Start of Disposition Event' length = 8;

set fin;
run;

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

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


ds.xpt";

proc copy in = sdtm out = xpt;


select ds;
run;

/* SUPPDS Creation */
data supp(rename=(S_PVERDT_=S_PVERDT));
set fin;
if S_PVERDT ne . then S_PVERDT_ = put(datepart(S_PVERDT),yymmdd10.);
keep studyid usubjid dsseq deathcau PREGS6624 ENROLNUM IETESTCD S_PVERDT_;
run;
proc sort data=supp out=supp_; by studyid usubjid dsseq; run;

proc transpose data=supp_ out=supp_t;


by studyid usubjid dsseq;
var S_PVERDT deathcau PREGS6624 ENROLNUM IETESTCD;
run;

data supp_fin(where =(qval ne ""));


length qlabel $40. qnam $8. qval $200.;
set supp_t;

rdomain = "DS";
idvar = "DSSEQ";
idvarval = strip(put(dsseq,best.));
qorig = "CRF page";
qeval = "";

if _name_ = "S_PVERDT" then do;


qnam = "S_PVERDT";
qlabel = "Protocol Version Date";
qval = strip(col1);
output;
end;

/* if _name_ = "DEATHCAU" then do;*/


/* qnam = "DEATHCAU";*/
/* qlabel = "Immediate Cause of Death";*/
/* qval = strip(col1);*/
/* output;*/
/* end;*/

if _name_ = "PREGS6624" then do;


qnam = "PREGS6624";
qlabel = "Previous GS-6624 Study";
qval = strip(col1);
output;
end;

if _name_ = "ENROLNUM" then do;


qnam = "ENROLNUM";
qlabel = "4-Digit Subject Number";
qval = strip(col1);
output;
end;

if _name_ = "IETESTCD" then do;


qnam = "IETESTCD";
qlabel = "For ineligible subj,specfy all crit not satisfied";
qval = strip(col1);
output;
end;

run;
/* Final SUPPDM creation */

data sdtm.suppds(label="Supplementary for Disposition");


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;

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

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


suppds.xpt";

proc copy in = sdtm out = xpt;


select suppds;
run;

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


dslog.txt" new;

/************ End of Program ******************/

You might also like