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;