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

HTML
LIBNAME AD "G:\TA_ONCO_01_24122024\ADaM";
/*Macro for sorting purpose*/
 
%MACRO SORT(in= ,out= ,datacon= ,outcon= ,var= ,con= );
PROC SORT DATA=&in &datacon OUT=&out &outcon;
      BY &var;
      WHERE &con;
RUN;
%MEND SORT;
 
%SORT (in=ad.adae ,out=ae ,var=usubjid aebodsys aedecod ,con= (TRTEMFL="Y")
            ,outcon=(keep=usubjid aebodsys aedecod ) );
 
%SORT (in=ad.adsl ,out=adsl ,var=usubjid ,con= (saffl="Y")
            ,outcon=(keep=usubjid  ) );

			DATA AE22;
			SET AE;
			IF aebodsys='Gastrointestinal disorders' THEN aedecod=STRIP("x")||STRIP(aedecod);
			RUN;
			DATA AE33;
			SET AE;
			IF aebodsys='Gastrointestinal disorders' THEN aedecod=STRIP("xX")||STRIP(aedecod);
			RUN;
 DATA AE;
 SET AE AE22 AE33;
 RUN;
PROC SQL NOPRINT;
      SELECT COUNT(DISTINCT USUBJID) INTO :N separated by '' FROM adsl ;
 
      CREATE TABLE ae1 AS
      SELECT DISTINCT aebodsys  , count(AEBODSYS) AS soc  ,  count(DISTINCT USUBJID) AS n ,
                        CALCULATED n * 100 /  INPUT ("&N",BEST.) AS X ,
                          INPUT(PUT(CALCULATED X,5.1),BEST.) AS PCT
                              , (  PUT(CALCULATED SOC,3.)
                                          ||"  ("||
                                          PUT(CALCULATED n ,4.)
                                          ||", "||
                                          PUT(CALCULATED X,4.1)
                                          ||"%) "           )     AS tabl
            FROM ae
      GROUP BY AEBODSYS
 
OUTER UNION CORR
 
      SELECT DISTINCT aedecod , aebodsys , count(aedecod) AS SOC , count(DISTINCT USUBJID) AS n ,
                        CALCULATED n * 100 /  INPUT ("&N",BEST.) AS X , INPUT(PUT(CALCULATED X,5.1),BEST.) AS PCT
                              , (  PUT(CALCULATED SOC,3.)
                                          ||"  ("||
                                          PUT(CALCULATED n ,4.)
                                          ||", "||
                                          PUT(CALCULATED X,4.1)
                                          ||"%) "           )     AS tabl
            FROM ae
      GROUP BY AEBODSYS , AEDECOD
      ORDER BY AEBODSYS , SOC DESC , AEDECOD;
QUIT;
%PUT &N ;
 
DATA ae2;
      LENGTH NEW $100;
      SET ae1;
      by aebodsys descending soc aedecod ;
      IF AEDECOD EQ "" THEN NEW=AEBODSYS ;
      ELSE IF AEDECOD NE "" THEN NEW="    "||AEDECOD;
RUN;
 
DATA t_ae001;
      SET ae2;
RUN;


DATA ADAE2;
SET t_ae001;
by aebodsys descending soc aedecod ;
RETAIN LNT PAG1 0;
LNT+1;

IF LNT >18  THEN DO;
PAG1=PAG1+1;
LNT=1;
END;

  /* Show AEBODSYS only on first line of each page */
  IF LNT = 1 THEN display_aebodsys = AEBODSYS;
  ELSE display_aebodsys = "";
  LNT=LNT+1;
RUN;

DATA ADAE3;
SET ADAE2;
IF  display_aebodsys NE '' AND 
display_aebodsys NE NEW;
NEW=STRIP(AEBODSYS)||"  (continue..........)";
LNT=1;

RUN;
 
DATA ADAE4;
SET ADAE2 ADAE3;
IF INDEX (NEW,"continue")>0 THEN tabl='';
RUN;
PROC SORT;
BY PAG1 LNT aebodsys aedecod new tabl display_aebodsys;
RUN;

%INCLUDE "G:\TA_ONCO_01_24122024\Macro\RTF.SAS";

TITLE1 J=L "PHARMA Private Limited.";
TITLE2 J=L "Protocol: 043-1-2025";
TITLE3 J=C "Table 14.1.9 ANALYSES ON FOLLOW-UP TIME";
FOOTNOTE1 J=L "G:\TA_ONCO_01_24122024\PGM\L\T_14_1_9";

OPTION ORIENTATION=LANDSCAPE;
ODS ESCAPECHAR='^';
ODS RTF FILE='G:\TA_ONCO_01_24122024\OUTPUTS\T_14_1_9.RTF' STYLE=Styles.Test
;
PROC REPORT DATA=ADAE4 NOWINDOWS SPLIT='*' HEADLINE HEADSKIP MISSING SPACING=2;
  COLUMN PAG1 aebodsys aedecod new tabl display_aebodsys;

  DEFINE PAG1 / ORDER NOPRINT;
  DEFINE aebodsys / ORDER NOPRINT order=DATA;
  DEFINE aedecod / ORDER NOPRINT order=DATA;

  DEFINE new / "MedDRA PRIMARY SYSTEM ORGAN CLASS*   MedDRA Preferred Term * * *"
      STYLE(COLUMN)=[cellwidth=70% ASIS=ON]
      STYLE(HEADER)=[JUST=LEFT ASIS=ON];

  DEFINE tabl / "  CDP870 400mg*Q2W Open - Label*    (N = &N)* nAE (nPat; % Pat)"
      STYLE(COLUMN)=[cellwidth=29%  ASIS=ON]
      STYLE(HEADER)=[JUST=LEFT ASIS=ON];

  DEFINE display_aebodsys / NOPRINT;

COMPUTE BEFORE _PAGE_;
LINE@1 "^{STYLE[OUTPUTWIDTH=100% BORDERTOPWIDTH=0.5PT]}";
ENDCOMP;
COMPUTE AFTER _PAGE_;
LINE@1 "^{STYLE[OUTPUTWIDTH=100% BORDERTOPWIDTH=0.5PT]}";
ENDCOMP;
  BREAK AFTER PAG1 / PAGE;
RUN;
ODS _ALL_ CLOSE;




Leave a Comment

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