options nocenter;
1.Mock Data
data ae;
input STUDYID $ USUBJID $ TRT01P $ AEDECOD $ AESER $;
datalines;
C001 001 Placebo Headache N
C001 002 DrugA Headache N
C001 003 DrugA Nausea N
C001 004 DrugB Headache Y
C001 005 Placebo Dizziness N
C001 006 DrugA Headache Y
C001 007 DrugB Nausea N
C001 008 Placebo Nausea N
C001 009 DrugB Dizziness Y
C001 010 DrugA Dizziness N
;
run;
proc print;run;
Output:
| Obs | STUDYID | USUBJID | TRT01P | AEDECOD | AESER |
|---|---|---|---|---|---|
| 1 | C001 | 001 | Placebo | Headache | N |
| 2 | C001 | 002 | DrugA | Headache | N |
| 3 | C001 | 003 | DrugA | Nausea | N |
| 4 | C001 | 004 | DrugB | Headache | Y |
| 5 | C001 | 005 | Placebo | Dizzines | N |
| 6 | C001 | 006 | DrugA | Headache | Y |
| 7 | C001 | 007 | DrugB | Nausea | N |
| 8 | C001 | 008 | Placebo | Nausea | N |
| 9 | C001 | 009 | DrugB | Dizzines | Y |
| 10 | C001 | 010 | DrugA | Dizzines | N |
2.Create Subject-Level Count by Treatment
proc sql;
create table subj_n as
select TRT01P, count(distinct USUBJID) as N
from ae
group by TRT01P;
quit;
proc print;run;
Output:
| Obs | TRT01P | N |
|---|---|---|
| 1 | DrugA | 4 |
| 2 | DrugB | 3 |
| 3 | Placebo | 3 |
3.Transpose AE Counts to Table Format
/* Step 1: Create ae_summary using PROC SQL */
proc sql;
create table ae_summary as
select AEDECOD, TRT01P,
count(distinct USUBJID) as AE_Count
from ae
group by AEDECOD, TRT01P;
quit;
proc print;run;
Output:
| Obs | AEDECOD | TRT01P | AE_Count |
|---|---|---|---|
| 1 | Dizzines | DrugA | 1 |
| 2 | Dizzines | DrugB | 1 |
| 3 | Dizzines | Placebo | 1 |
| 4 | Headache | DrugA | 2 |
| 5 | Headache | DrugB | 1 |
| 6 | Headache | Placebo | 1 |
| 7 | Nausea | DrugA | 1 |
| 8 | Nausea | DrugB | 1 |
| 9 | Nausea | Placebo | 1 |
/* Step 2: Transpose the table to show treatment groups horizontally */
proc transpose data=ae_summary out=ae_trans prefix=Count_;
by AEDECOD;
id TRT01P;
var AE_Count;
run;
proc print;run;
Output:
| Obs | AEDECOD | _NAME_ | Count_DrugA | Count_DrugB | Count_Placebo |
|---|---|---|---|---|---|
| 1 | Dizzines | AE_Count | 1 | 1 | 1 |
| 2 | Headache | AE_Count | 2 | 1 | 1 |
| 3 | Nausea | AE_Count | 1 | 1 | 1 |
4.Merge with Subject Counts and Calculate Percentages
data final_table;
set ae_trans;
format Headline $200.;
Headline = catx(' ',
AEDECOD,
put(Count_Placebo, 3.), '(', put(Count_Placebo/50*100, 4.1), '%)',
put(Count_DrugA, 3.), '(', put(Count_DrugA/60*100, 4.1), '%)',
put(Count_DrugB, 3.), '(', put(Count_DrugB/55*100, 4.1), '%)'
);
run;
proc print;run;
Output:
| Obs | AEDECOD | _NAME_ | Count_DrugA | Count_DrugB | Count_Placebo | Headline |
|---|---|---|---|---|---|---|
| 1 | Dizzines | AE_Count | 1 | 1 | 1 | Dizzines 1 ( 2.0 %) 1 ( 1.7 %) 1 ( 1.8 %) |
| 2 | Headache | AE_Count | 2 | 1 | 1 | Headache 1 ( 2.0 %) 2 ( 3.3 %) 1 ( 1.8 %) |
| 3 | Nausea | AE_Count | 1 | 1 | 1 | Nausea 1 ( 2.0 %) 1 ( 1.7 %) 1 ( 1.8 %) |
5.Print the Final Table
proc print data=final_table noobs label;
var Headline;
label Headline = "Adverse Event Summary by Treatment (%)";
run;
Output:
| Adverse Event Summary by Treatment (%) |
|---|
| Dizzines 1 ( 2.0 %) 1 ( 1.7 %) 1 ( 1.8 %) |
| Headache 1 ( 2.0 %) 2 ( 3.3 %) 1 ( 1.8 %) |
| Nausea 1 ( 2.0 %) 1 ( 1.7 %) 1 ( 1.8 %) |
6.Listing Code
proc sort data=ae; by TRT01P AEDECOD USUBJID; run;
proc print;run;
Output:
| Obs | STUDYID | USUBJID | TRT01P | AEDECOD | AESER |
|---|---|---|---|---|---|
| 1 | C001 | 010 | DrugA | Dizzines | N |
| 2 | C001 | 002 | DrugA | Headache | N |
| 3 | C001 | 006 | DrugA | Headache | Y |
| 4 | C001 | 003 | DrugA | Nausea | N |
| 5 | C001 | 009 | DrugB | Dizzines | Y |
| 6 | C001 | 004 | DrugB | Headache | Y |
| 7 | C001 | 007 | DrugB | Nausea | N |
| 8 | C001 | 005 | Placebo | Dizzines | N |
| 9 | C001 | 001 | Placebo | Headache | N |
| 10 | C001 | 008 | Placebo | Nausea | N |
proc print data=ae label noobs;
var USUBJID TRT01P AEDECOD AESER;
label USUBJID="Subject ID"
TRT01P="Treatment"
AEDECOD="Adverse Event"
AESER="Serious (Y/N)";
run;
| Subject ID | Treatment | Adverse Event | Serious (Y/N) |
|---|---|---|---|
| 010 | DrugA | Dizzines | N |
| 002 | DrugA | Headache | N |
| 006 | DrugA | Headache | Y |
| 003 | DrugA | Nausea | N |
| 009 | DrugB | Dizzines | Y |
| 004 | DrugB | Headache | Y |
| 007 | DrugB | Nausea | N |
| 005 | Placebo | Dizzines | N |
| 001 | Placebo | Headache | N |
| 008 | Placebo | Nausea | N |
No comments:
Post a Comment