/* This program was supplied by a SAS customer as an example of something */
/* that was DIFFICULT to read. */
/* Here it is reformatted using the code formatter feature in SAS */
/* Enterprise Guide 4.3. You press Ctrl+I, wait about 1 second, and */
/* presto! Much easier on the eyes. */
RSUBMIT;
libname project '/project';
libname mysas '/project/smith';
data totsubset;
set project.total_consolidated(keep=vaers_id onstdays symc1-symc20 vax1-vax7 age_yrs state recvdate);
data shutoff;
length vaers_id $8;
vaers_id='999999-9';
data vax_totals (keep=vax) symptom_totals (keep=c1) two_symptom_combos (keep=c1 c2)
three_symptom_combos (keep=c1-c3) four_symptom_combos (keep=c1-c4)
vax_symptom_combos (keep=vax c1) vax_two_symptom_combos (keep=vax c1 c2)
vax_three_symptom_combos (keep=vax c1-c3) vax_four_symptom_combos (keep=vax c1-c4);
merge totsubset shutoff (in=thats_all_folks);
by vaers_id;
array syms $21 symc1-symc20;
length c1-c4 symhold onset_symp $21 stage $7 vax $6;
array vaxs $6 vax1-vax7;
length pair $30;
retain totrep 0;
if thats_all_folks=1 then
do;
call symput('total', totrep);
stop;
end;
totrep=totrep+1;
onset=onstdays;
if onset ne . then
do;
if onset<2 then
onset_symp='EARLY ONSET';
count=1;
do while (count<21);
if syms(count)=' ' then
do;
syms(count)=onset_symp;
count=20;
end;
count=count+1;
end;
end;
combo=0;
do j=1 to 20;
if syms(j)=' ' then
syms(j)='ZZZZZZ';
else
do;
combo=combo+1;
syms(j)=trim(left(syms(j)));
end;
end;
do j=1 to 19;
do k=j+1 to 20;
if syms(k)<syms(j) then
do;
symhold=syms(k);
syms(k)=syms(j);
syms(j)=symhold;
end;
end;
end;
first=1;
do m=1 to 7;
if vaxs(m) ne ' ' then
do;
vax=vaxs(m);
output vax_totals;
do i=1 to combo;
c1=syms(i);
if first=1 then
output symptom_totals;
output vax_symptom_combos;
do j=i+1 to combo;
c2=syms(j);
if first=1 then
output two_symptom_combos;
output vax_two_symptom_combos;
do k=j+1 to combo;
c3=syms(k);
if first=1 then
output three_symptom_combos;
output vax_three_symptom_combos;
do l=k+1 to combo;
c4=syms(l);
if first=1 then
output four_symptom_combos;
output vax_four_symptom_combos;
end;
end;
end;
end;
first=2;
end;
end;
proc sort data=vax_four_symptom_combos;
by c1 c2 c3 c4 vax;
data mysas.vax_four_symptom_combos;
set vax_four_symptom_combos;
by c1 c2 c3 c4 vax;
retain sum;
if first.c1=1 or first.c2=1 or first.c3=1 or first.c4=1 or first.vax=1 then
sum=0;
sum=sum+1;
if last.c1=1 or last.c2=1 or last.c3=1 or last.c4=1 or last.vax=1 then
do;
if sum>4 then
output;
end;
proc sort data=vax_three_symptom_combos;
by c1 c2 c3 vax;
data mysas.vax_three_symptom_combos;
set vax_three_symptom_combos;
by c1 c2 c3 vax;
retain sum;
if first.c1=1 or first.c2=1 or first.c3=1 or first.vax=1 then
sum=0;
sum=sum+1;
if last.c1=1 or last.c2=1 or last.c3=1 or last.vax=1 then
do;
if sum>4 then
output;
end;
proc sort data=vax_two_symptom_combos;
by c1 c2 vax;
data mysas.vax_two_symptom_combos;
set vax_two_symptom_combos;
by c1 c2 vax;
retain sum;
if first.c1=1 or first.c2=1 or first.vax=1 then
sum=0;
sum=sum+1;
if last.c1=1 or last.c2=1 or last.vax=1 then
do;
if sum>4 then
output;
end;
proc sort data=vax_symptom_combos;
by c1 vax;
data mysas.vax_symptom_combos;
set vax_symptom_combos;
by c1 vax;
retain sum;
if first.c1=1 or first.vax=1 then
sum=0;
sum=sum+1;
if last.c1=1 or last.vax=1 then
do;
if sum>4 then
output;
end;
proc sort data=vax_totals;
by vax;
data mysas.vax_totals;
set vax_totals;
by vax;
retain vsum;
if first.vax=1 then
vsum=0;
vsum=vsum+1;
if last.vax=1 then
do;
if vsum>4 then
output;
end;
proc sort data=four_symptom_combos;
by c1 c2 c3 c4;
data mysas.four_symptom_combos;
set four_symptom_combos;
by c1 c2 c3 c4;
retain csum;
if first.c1=1 or first.c2=1 or first.c3=1 or first.c4=1 then
csum=0;
csum=csum+1;
if last.c1=1 or last.c2=1 or last.c3=1 or last.c4=1 then
do;
if csum>4 then
output;
end;
proc sort data=three_symptom_combos;
by c1 c2 c3;
data mysas.three_symptom_combos;
set three_symptom_combos;
by c1 c2 c3;
retain csum;
if first.c1=1 or first.c2=1 or first.c3=1 then
csum=0;
csum=csum+1;
if last.c1=1 or last.c2=1 or last.c3=1 then
do;
if csum>4 then
output;
end;
proc sort data=two_symptom_combos;
by c1 c2;
data mysas.two_symptom_combos;
set two_symptom_combos;
by c1 c2;
retain csum;
if first.c1=1 or first.c2=1 then
csum=0;
csum=csum+1;
if last.c1=1 or last.c2=1 then
do;
if csum>4 then
output;
end;
proc sort data=symptom_totals;
by c1;
data mysas.symptom_totals;
set symptom_totals;
by c1;
retain csum;
if first.c1=1 then
csum=0;
csum=csum+1;
if last.c1=1 then
do;
if csum>4 then
output;
end;
proc sort data=mysas.vax_four_symptom_combos out=combosort;
by vax;
data v_margin;
merge mysas.vax_totals combosort;
by vax;
lift=log(sum/vsum);
proc sort data=v_margin;
by c1 c2 c3 c4;
*** 4;
data mysas.four_lift_list;
merge v_margin mysas.four_symptom_combos;
by c1 c2 c3 c4;
keep vax symptom1-symptom4 loglift logPRR logOR sum a b c d apct cpct acpct;
symptom1=c1;
symptom2=c2;
symptom3=c3;
symptom4=c4;
loglift=lift+log(&total/csum);
logPRR=log((&total-vsum)*sum/(vsum*(csum-sum)));
logOR=log(sum*(&total-vsum-csum+sum)/((csum-sum)*(vsum-sum)));
a=sum;
b=vsum-a;
c=csum-a;
ab=vsum;
ac=a+c;
cd=&total-vsum;
d=cd-c;
apct=a*100/ab;
cpct=c*100/cd;
acpct=ac*100/&total;
apct=round(apct,0.01);
cpct=round(cpct,0.01);
acpct=round(acpct,0.01);
if loglift NE . then
output;
proc sort data=mysas.four_lift_list;
by descending loglift;
proc sort data=mysas.vax_three_symptom_combos out=combosort;
by vax;
data v_margin;
merge mysas.vax_totals combosort;
by vax;
lift=log(sum/vsum);
proc sort data=v_margin;
by c1 c2 c3;
*** 3;
data mysas.three_lift_list;
merge v_margin mysas.three_symptom_combos;
by c1 c2 c3;
keep vax symptom1-symptom4 loglift logPRR logOR sum a b c d apct cpct acpct;
symptom1=c1;
symptom2=c2;
symptom3=c3;
symptom4='';
loglift=lift+log(&total/csum);
logPRR=log((&total-vsum)*sum/(vsum*(csum-sum)));
logOR=log(sum*(&total-vsum-csum+sum)/((csum-sum)*(vsum-sum)));
a=sum;
b=vsum-a;
c=csum-a;
ab=vsum;
ac=a+c;
cd=&total-vsum;
d=cd-c;
apct=a*100/ab;
cpct=c*100/cd;
acpct=ac*100/&total;
apct=round(apct,0.01);
cpct=round(cpct,0.01);
acpct=round(acpct,0.01);
if loglift NE . then
output;
proc sort data=mysas.three_lift_list;
by descending loglift;
proc sort data=mysas.vax_two_symptom_combos out=combosort;
by vax;
data v_margin;
merge mysas.vax_totals combosort;
by vax;
lift=log(sum/vsum);
proc sort data=v_margin;
by c1 c2;
*** 2;
data mysas.two_lift_list;
merge v_margin mysas.two_symptom_combos;
by c1 c2;
keep vax symptom1-symptom4 loglift logPRR logOR sum a b c d apct cpct acpct;
symptom1=c1;
symptom2=c2;
symptom3='';
symptom4='';
loglift=lift+log(&total/csum);
logPRR=log((&total-vsum)*sum/(vsum*(csum-sum)));
logOR=log(sum*(&total-vsum-csum+sum)/((csum-sum)*(vsum-sum)));
a=sum;
b=vsum-a;
c=csum-a;
ab=vsum;
ac=a+c;
cd=&total-vsum;
d=cd-c;
apct=a*100/ab;
cpct=c*100/cd;
acpct=ac*100/&total;
apct=round(apct,0.01);
cpct=round(cpct,0.01);
acpct=round(acpct,0.01);
if loglift NE . then
output;
proc sort data=mysas.two_lift_list;
by descending loglift;
proc sort data=mysas.vax_symptom_combos out=combosort;
by vax;
data v_margin;
merge mysas.vax_totals combosort;
by vax;
lift=log(sum/vsum);
proc sort data=v_margin;
by c1;
*** 1;
data mysas.single_lift_list;
merge v_margin mysas.symptom_totals;
by c1;
keep vax symptom1-symptom4 loglift logPRR logOR sum a b c d apct cpct acpct;
symptom1=c1;
symptom2='';
symptom3='';
symptom4='';
loglift=lift+log(&total/csum);
logPRR=log((&total-vsum)*sum/(vsum*(csum-sum)));
logOR=log(sum*(&total-vsum-csum+sum)/((csum-sum)*(vsum-sum)));
a=sum;
b=vsum-a;
c=csum-a;
ab=vsum;
ac=a+c;
cd=&total-vsum;
d=cd-c;
apct=a*100/ab;
cpct=c*100/cd;
acpct=ac*100/&total;
apct=round(apct,0.01);
cpct=round(cpct,0.01);
acpct=round(acpct,0.01);
if loglift NE . then
output;
proc sort data=mysas.single_lift_list;
by descending loglift;
data mysas.tmp;
merge mysas.four_lift_list mysas.three_lift_list mysas.two_lift_list mysas.single_lift_list;
by descending loglift;
drop sum;
support=sum;
Proc datasets library=mysas;
delete four_lift_list three_lift_list two_lift_list single_lift_list four_symptom_combos
three_symptom_combos two_symptom_combos symptom_totals vax_four_symptom_combos vax_three_symptom_combos vax_two_symptom_combos vax_symptom_combos vax_totals;
run;
RSUBMIT;
* a acpct apct b c cpct d logOR logPRR loglift support symptom1-symptom4 vax;
proc contents data=mysas.tmp;
run;
data t(drop=symptom1-symptom4);
set mysas.tmp(keep=a b c d logPRR vax symptom1-symptom4 vax);
PRR=exp(logPRR);
PRR=round(PRR,0.1);
sympc=trim(symptom1)||' '||trim(symptom2)||' '||trim(symptom3)||' '||trim(symptom4);
vsymps=trim(vax)||'=>'||sympc;
*%let sy="CONJUNCTIVITIS"; *%let sy="EDEMA FACE";
proc print data=t;
where vax="FLU" and (prr gt 5 or prr = .) and a ge 20;
*where vax="FLU" and (prr1>=2 or prr2>=2 or prr3>=2 or prr4>=2 or prr5>=2)
and (symptom1=&sy or symptom2=&sy or symptom3=&sy or symptom4=&sy);
*where vax="PPV" and (prr>=2) and a ge 15;
var PRR a vsymps;
run;