Adverse Event ADaM [ADAE] programming SAS

HTML
/*******************************************************************
* Client:  PHARMA Private Limited.                                                           
* Project: Protocol: 043-1-2025                                                     
* Program: ADAE.SAS  
*
* Program Type: ADaM
*
* Purpose: To produce ADaM
* Usage Notes: 
*
* SASĀ® Version: 9.4
* Operating System: Windows 2010 Standard Edition.                   
*
* Author: shiva
* Date Created: 28-FEB-2025
* Modification History:
*******************************************************************/
LIBNAME SDTM "G:\TA_ONCO_01_24122024\SDTM Data";
LIBNAME ADAM_US "G:\TA_ONCO_01_24122024\ADaM_us";
OPTION VALIDVARNAME=UPCASE;
%LET KEEPVAR=STUDYID USUBJID SUBJID SITEID AESEQ SAFFL DLTEVLFL PKEVLFL
ENRLFL TRT01P TRT01PN ARMCD ARM ACTARMCD ACTARM TRTSDT TRTEDT TRTP 
AETERM AEDECOD AEBODSYS AEBDSYCD AELLT AELLTCD AEPTCD AEHLT AEHLTCD 
AEHLGT AEHLGTCD AESOC AESOCCD AESTDTC ASTDT ASTDTF AEENDTC AENDT
AENDTF ADURN ADURU ASTDY AESTDY AENDY AEENDY TRTEMFL AESER AEREL
AERELNP AETOX AETOXGR AEACN AEACNOTH AEACNNP AEOUT AEENRF AEDISOFL
AEDISNFL AESDTH
;

DATA ADSL_AE;
MERGE ADAM_US.ADSL (IN=A) SDTM.AE (IN=B);
BY USUBJID;
IF A AND B;
RUN;


***************SUPP-- TO MAIN DATASET MERGE********;
/*STEP1:*/
DATA SUPPAE;
SET SDTM.SUPPAE;
AESEQ= INPUT (IDVARVAL,BEST.);
RUN;
PROC SORT;BY USUBJID AESEQ;RUN;
/*STEP2:*/PROC TRANSPOSE DATA=SUPPAE OUT=SUPPAE_T;
BY USUBJID AESEQ;
ID QNAM;
VAR QVAL;
RUN;
/*STEP3: BACK MERGE*/DATA AE2;
MERGE ADSL_AE (IN=A) SUPPAE_T (IN=B);
BY USUBJID AESEQ;
IF A;
RUN;


DATA AE3;
SET AE2 
/*(KEEP=AESTDTC TRTSDT AEENDTC TRTEDT)*/;
TRTSDTC= PUT (TRTSDT,YYMMDD10.);
TRTEDTC= PUT (TRTEDT,YYMMDD10.);

AEST_YY= STRIP(SUBSTR(AESTDTC,1,4));
AEST_MM= STRIP(SUBSTR(AESTDTC,6,2));
AEST_DD= STRIP(SUBSTR(AESTDTC,9,2));

AEEN_YY= STRIP(SUBSTR(AEENDTC,1,4));
AEEN_MM= STRIP(SUBSTR(AEENDTC,6,2));
AEEN_DD= STRIP(SUBSTR(AEENDTC,9,2));



TRST_YY= STRIP(SUBSTR(TRTSDTC,1,4));
TRST_MM= STRIP(SUBSTR(TRTSDTC,6,2));
TRST_DD= STRIP(SUBSTR(TRTSDTC,9,2));

TREN_YY= STRIP(SUBSTR(TRTEDTC,1,4));
TREN_MM= STRIP(SUBSTR(TRTEDTC,6,2));
TREN_DD= STRIP(SUBSTR(TRTEDTC,9,2));

/*KEEP TRE: AEE:;*/RUN;

DATA AE4_ST;
SET AE3;
/*2014-10*/IF AEST_DD EQ '' AND AEST_MM NE '' AND AEST_YY NE '' THEN DO;

IF AEST_MM NE TRST_MM THEN AEST_DD="01";
ELSE IF AEST_MM EQ TRST_MM THEN AEST_DD=TRST_DD;
ASTDTF='D';
END;
/*2014*/IF AEST_DD EQ '' AND AEST_MM EQ '' AND AEST_YY NE '' THEN DO;
IF AEST_YY NE TRST_YY THEN DO;
AEST_MM='12';
AEST_DD='31';
ASTDTF='M';

END;
END;

IF AEST_DD EQ '' AND AEST_MM EQ '' AND AEST_YY NE '' THEN DO;

IF AEST_YY EQ TRST_YY THEN DO;
AEST_MM=TRST_MM;
AEST_DD=TRST_DD;
ASTDTF='M';

END;
END;

IF AEST_DD EQ '' AND AEST_MM EQ '' AND AEST_YY EQ '' THEN DO;
AEST_MM=TRST_MM;
AEST_DD=TRST_DD;
AEST_YY=TRST_YY;
ASTDTF='Y';
END;

ASTDTC= CATX ("-",AEST_YY,AEST_MM,AEST_DD);
ASTDT= INPUT (ASTDTC,YYMMDD10.);
FORMAT ASTDT DATE9.;

RUN;

DATA AE4_END;
RETAIN &KEEPVAR.;

SET AE4_ST;
/*Assign the last day of the month.*/
/*2012-01*//*/*2012-01-01----CHAR*//*2012-01-01 ---NUME*//*/*2012-02-01-----intnx 1 month increment*/;
/*/*2012-01-31* minus 1 day*/

IF AEEN_DD EQ '' AND AEEN_MM NE '' AND AEEN_YY NE '' THEN DO;

AENDTC1= INTNX("month",INPUT (STRIP(AEENDTC)||"-01",yymmdd10.),1)-1;
AENDTC1C= PUT (AENDTC1,YYMMDD10.);
AENDTF='D';
AEEN_DD= SUBSTR(AENDTC1C,9,2);
end;


/*2014*/IF AEEN_DD EQ '' AND AEEN_MM eq '' AND AEEN_YY NE '' THEN DO;

AEEN_MM='12';
AEEN_DD='31';
AENDTF='M';

END;

IF AEEN_DD EQ '' AND AEEN_MM eq '' AND AEEN_YY EQ '' THEN DO;

AEEN_MM=TREN_MM;
AEEN_DD=TREN_DD;
AEEN_YY=TREN_YY;

AENDTF='Y';

END;

AENDTC= CATX ("-",AEEN_YY,AEEN_MM,AEEN_DD);
AENDT=INPUT (AENDTC,YYMMDD10.);
FORMAT AENDT DATE9.;

IF AEENRF='ONGOING' THEN DO;
AENDTC='';
AENDT=.;
AENDTF=' ';
END;

TRTP=TRT01P;

IF ASTDT NE . AND TRTSDT NE . THEN DO;
ASTDY=ASTDT-TRTSDT;
IF ASTDY GE 0 THEN ASTDY=ASTDY+1;
END;

IF AENDT NE . AND TRTSDT NE . THEN DO;
AENDY=AENDT-TRTSDT;
IF AENDY GE 0 THEN AENDY=AENDY+1;
END;

IF AENDY NE . AND ASTDY NE . THEN DO;
adurn=AENDY-ASTDY+1;
ADURU="Days";
END;

if upcase(aeacn) = 'DRUG WITHDRAWN' then aedisofl = 'Y';
if upcase(aeacnnp) = 'DRUG WITHDRAWN' then aedisnfl = 'Y';

IF ASTDT NE . AND TRTSDT NE . THEN DO;
IF ASTDT >= TRTSDT THEN TRTEMFL='Y';
END;
IF TRTEDT NE . THEN
TRTEDT_30= TRTEDT+30;
IF ASTDT NE . AND TRTSDT NE . AND TRTEDT_30 NE . THEN DO;
IF (ASTDT >= TRTSDT) AND (ASTDT <= TRTEDT_30) THEN TRTEMFL='Y';
END;

KEEP &KEEPVAR.;

RUN;


DATA ADAM_US.ADAE (LABEL='Adverse Event Analysis Dataset');
SET AE4_END;
RUN;







sascodingexpert@gmail.com

20+ clinical SAS Experience

Share
Published by
sascodingexpert@gmail.com

Recent Posts

SAS Tip: Repeating AEBODSYS on New Page in PROC REPORT Output

ADAEDownload ADSLDownload HTML LIBNAME AD "G:\TA_ONCO_01_24122024\ADaM"; /*Macro for sorting purpose*/ %MACRO SORT(in= ,out= ,datacon= ,outcon=…

3 months ago

Q#5 Best Overall Response (BOR) , Objective Response Rate (ORR) ,95% Confidence Interval (CI) &P-value Oncology

Definition of Best Overall Response (BOR) Best Overall Response (BOR) is the best treatment response…

3 months ago

All Logs checking macro

HTML /* retrieve all the logs in the specified directory */ %macro checklogs(loc=, /* location…

3 months ago

Q#4 Please tell recent 5 studies titles, primary and secondary objectives and End points

1. Study Title: A Randomized Phase 3 Study of MRTX949 versus Docetaxel in Patients with…

4 months ago

SDTM SE (Subject Element ) Dataset Programming

Raw.svDownload SDTM_US.DMDownload SDTMIG_v3.3_FINALDownload HTML ******************************************************************* * Client: PHARMA Private Limited. * Project: Protocol: 043-1-2025 *…

4 months ago

Q#3 Please tell recent 5 studies titles, primary and secondary objectives.

1. A Randomized Phase 3 Study of MRTX949 versus Docetaxel in Patients with Previously Treated…

4 months ago