SDTM SE (Subject Element ) Dataset Programming

HTML
*******************************************************************
* Client:  PHARMA Private Limited.                                                           
* Project: Protocol: 043-1-2025                                                     
* Program: SE.SAS  
*
* Program Type: SDTM
*
* Purpose: To produce SDTM
* Usage Notes: 
*
* SASĀ® Version: 9.4
* Operating System: Windows 2010 Standard Edition.                   
*
* Author: shiva
* Date Created: 18-MAR-2025
* Modification History:
*******************************************************************/
OPTIONS NOFMTERR;
LIBNAME RAW "G:\TA_ONCO_01_24122024\RAW DATASETS";
OPTION VALIDVARNAME=UPCASE;
LIBNAME SDTM_US "G:\TA_ONCO_01_24122024\SDTM_US";

/*%LET KEEPVAR=*/
PROC DATASETS LIB=WORK KILL;
RUN;
QUIT;


DATA SE1;
SET RAW.SV;
IF VISDAT NE .;
IF VISNAME='Cycle 2 - Day 1 (1st infusion)';
CYCLE2= PUT (VISDAT,YYMMDD10.);
STUDYID="101-18101";
DOMAIN='DM';
SITEID=SCAN (SUBNUM,1,"-");
SUBJID=SCAN (SUBNUM,2,"-");

USUBJID=CATX ("-",STUDYID,SITEID,SUBJID);
KEEP USUBJID CYCLE2;
RUN;
PROC SORT;BY USUBJID ;RUN;

DATA SE2;
SET RAW.SV;
IF VISDAT NE .;
IF VISNAME='Follow-up - 30 Days After Last Dose';
STFUP= PUT (VISDAT,YYMMDD10.);
STUDYID="101-18101";
DOMAIN='DM';
SITEID=SCAN (SUBNUM,1,"-");
SUBJID=SCAN (SUBNUM,2,"-");

USUBJID=CATX ("-",STUDYID,SITEID,SUBJID);
KEEP USUBJID STFUP;
RUN;
PROC SORT;BY USUBJID ;RUN;


DATA SE3;
SET RAW.SV;
IF VISDAT NE .;
IF VISNAME='Cycle 3 - Day 1 (1st infusion)';
CYCLE3= PUT (VISDAT,YYMMDD10.);
STUDYID="101-18101";
DOMAIN='DM';
SITEID=SCAN (SUBNUM,1,"-");
SUBJID=SCAN (SUBNUM,2,"-");

USUBJID=CATX ("-",STUDYID,SITEID,SUBJID);
KEEP USUBJID CYCLE3;
RUN;
PROC SORT;BY USUBJID ;RUN;


DATA SE4;
LENGTH ELEMENT EPOCH ETCD $200.;
MERGE SDTM_US.DM (DROP=DOMAIN)
SE1 
SE2
SE3;
BY USUBJID;
DOMAIN='SE';
IF RFICDTC NE '' THEN DO;
ETCD='SCRN';
ELEMENT='Screening';
TAETORD=1;
EPOCH='SCREENING';
SESTDTC=RFICDTC;
IF RFXSTDTC NE '' THEN SEENDTC=RFXSTDTC;
ELSE SEENDTC=RFPENDTC;
OUTPUT;
END;

IF RFXSTDTC NE '' THEN DO;
ETCD='CYCLE1';
ELEMENT='Cycle 1';
TAETORD=2;
EPOCH='TREATMENT';
SESTDTC=RFXSTDTC;
IF CYCLE2 NE '' THEN SEENDTC=CYCLE2;
ELSE IF RFXENDTC NE '' THEN SEENDTC=RFXENDTC;
ELSE IF STFUP NE '' THEN SEENDTC=STFUP;
ELSE SEENDTC=RFPENDTC;
OUTPUT;
END;

IF CYCLE2 NE '' THEN DO;
ETCD='CYCLE2';
ELEMENT='Cycle 2';
TAETORD=3;
EPOCH='TREATMENT';
SESTDTC=CYCLE2;
IF CYCLE3 NE '' THEN SEENDTC=CYCLE3;
ELSE IF RFXENDTC NE '' THEN SEENDTC=RFXENDTC;
ELSE IF STFUP NE '' THEN SEENDTC=STFUP;
ELSE SEENDTC=RFPENDTC;
OUTPUT;
END;

IF CYCLE3 NE '' THEN DO;
ETCD='CYCLE3';
ELEMENT='Cycle 3';
TAETORD=4;
EPOCH='TREATMENT';
SESTDTC=CYCLE3;
 IF RFXENDTC NE '' THEN SEENDTC=RFXENDTC;
ELSE IF STFUP NE '' THEN SEENDTC=STFUP;
ELSE SEENDTC=RFPENDTC;
OUTPUT;
END;

IF RFXENDTC NE '' THEN DO;
ETCD='SFUP';
ELEMENT='Safety Follow-Up';
TAETORD=5;
EPOCH='SAFETY FOLLOW-UP';
SESTDTC=RFXENDTC;
 IF STFUP NE '' THEN SEENDTC=STFUP;
ELSE SEENDTC=RFPENDTC;
OUTPUT;
END;

IF STFUP NE '' THEN DO;
ETCD='LTFUP';
ELEMENT='Long-Term Follow-Up';
TAETORD=6;
EPOCH='LONG-TERM FOLLOW-UP';
SESTDTC=STFUP;
 SEENDTC=RFPENDTC;
OUTPUT;
END;

KEEP STUDYID DOMAIN USUBJID SESEQ ETCD ELEMENT TAETORD EPOCH SESTDTC SEENDTC;
RUN;
PROC SORT;
BY STUDYID USUBJID TAETORD ETCD SESTDTC;
RUN;

DATA SE5;
SET SE4;
BY STUDYID USUBJID TAETORD ETCD SESTDTC;
IF FIRST.USUBJID THEN SESEQ=1;
ELSE SESEQ+1;
RUN;




/*ATTRIBUTES*/

LIBNAME SDTM_US "G:\TA_ONCO_01_24122024\SDTM_US";
DATA SDTM_US.SE (LABEL="Subject Elements");
RETAIN STUDYID DOMAIN USUBJID SESEQ ETCD ELEMENT TAETORD
EPOCH SESTDTC SEENDTC;

SET SE5;
RUN;






				

Leave a Comment

Your email address will not be published. Required fields are marked *