*********************************************** * MACRO: IPLOT * * INTERACTION PLOTS FOR FACTORIAL DESIGNS * **********************************************; *options symbolgen mlogic mprint; %window iplot group=name #1 @4 'ENTER THE NAME OF YOUR DATA SET' @47 dname1 16 attr=underline color=green required=yes #2 @4 'ENTER THE NAME OF THE RESPONSE VARIABLE' @55 resp1 8 attr=underline color=green required=yes #3 @4 'ENTER THE NUMBER OF MAIN EFFECTS IN THE MODEL' @55 k1 8 attr=underline color=green required=yes group=num1 #5 @4 'ENTER THE NAME OF THE FIRST MAIN EFFECT' @50 ef1 8 attr=underline color=green required=yes group=num2 #7 @4 'ENTER THE NAME OF THE SECOND MAIN EFFECT' @50 ef2 8 attr=underline color=green required=yes group=num3 #9 @4 'ENTER THE NAME OF THE THIRD MAIN EFFECT' @50 ef3 8 attr=underline color=green required=yes group=num4 #11 @4 'ENTER THE NAME OF THE FOURTH MAIN EFFECT' @50 ef4 8 attr=underline color=green required=yes group=num5 #13 @4 'ENTER THE NAME OF THE FIFTH MAIN EFFECT' @50 ef5 8 attr=underline color=green required=yes group=num6 #15 @4 'ENTER THE NAME OF THE SIXTH MAIN EFFECT' @50 ef6 8 attr=underline color=green required=yes group=num7 #17 @4 'ENTER THE NAME OF THE SEVENTH MAIN EFFECT' @50 ef7 8 attr=underline color=green required=yes group=inames #19 @4 'ENTER THE NAME OF THE VARIABLE ON THE HORIZONTAL AXIS' #20 @4 '(USE I12 FOR THE INTERACTION OF MAIN EFFECTS 1 AND 2)' @60 hiname1 8 attr=underline color=green required=yes #21 @4 'ENTER THE NAME OF THE VARIABLE SHOWING VERTICAL LEVELS' @60 viname1 8 attr=underline color=green required=yes group=qpmore #23 @4 'ENTER 1 FOR NEXT PLOT, ENTER 0 TO EXIT:' @50 inout1 8 attr=underline color=green required=yes group=error #24 @10 'YOU HAVE ENTERED AN INVALID VALUE.' #25 @10 'THE MAXIMUM OF MAIN EFFECTS IS 7.' #26 @10 'PLEASE HIT RETURN, THEN TRY AGAIN.'; %macro iplots; * THE NAMES OF DATA SET & OUTPUT FILE AND RESPONSE VARIABLE & NUMBER OF MAIN FACTORS ARE PROVIDED BY USERS; %choice: %display iplot.name; %let dname=&dname1; %let dname1=; %let resp=&resp1; %let resp1=; %let k=&k1; %let k1=; %if &k > 7 %then %goto err; * LOOP FOR ENTERING NAMES OF MAIN FACTORS; %do i=1 %to &k; %display iplot.num&i; %let eff&i=&&ef&i; %let ef&i=; %end; * ENTER THE VERTICAL AND HORIZONTAL INTERACTION VARIBLES; %display iplot.inames; %let hiname=&hiname1; %let hiname1=; %let viname=&viname1; %let viname1=; * GENERATE ALL INTERACTION VARIABLES; %macro startn; &resp %do i=1 %to &k; &&eff&i %end; %mend startn; data start; set &dname; keep %startn; run; %main: data out1; set start; label &resp="&resp"; %do i=1 %to &k; label &&eff&i="&&eff&i"; %end; %do i1=1 %to &k-1; %if &k>=2 %then %do; %do i2=&i1+1 %to &k; I&i1&i2=&&eff&i1*&&eff&i2; label I&i1&i2="&&eff&i1*&&eff&i2"; %if (&k>=3) and (&i1<&k-1) and (&i2<&k) %then %do; %do i3=&i2+1 %to &k; I&i1&i2&i3=&&eff&i1*&&eff&i2*&&eff&i3; label I&i1&i2&i3="&&eff&i1*&&eff&i2*&&eff&i3"; %if (&k>=4) and (&i1<&k-2) and (&i2<&k-1) and (&i3<&k) %then %do; %do i4=&i3+1 %to &k; I&i1&i2&i3&i4=&&eff&i1*&&eff&i2*&&eff&i3*&&eff&i4; label I&i1&i2&i3&i4= "&&eff&i1*&&eff&i2*&&eff&i3*&&eff&i4"; %if (&k>=5) and (&i1<&k-3) and (&i2<&k-2) and (&i3<&k-1) and (&i4<&k) %then %do; %do i5=&i4+1 %to &k; I&i1&i2&i3&i4&i5=&&eff&i1*&&eff&i2*&&eff&i3*&&eff&i4 *&&eff&i5; label I&i1&i2&i3&i4&i5= "&&eff&i1*&&eff&i2*&&eff&i3*&&eff&i4*&&eff&i5"; %if (&k>=6) and (&i1<&k-4) and (&i2<&k-3) and (&i3<&k-2) and (&i4<&k-1) and (&i5<&k) %then %do; %do i6=&i5+1 %to &k; I&i1&i2&i3&i4&i5&i6=&&eff&i1*&&eff&i2*&&eff&i3*&&eff&i4 *&&eff&i5*&&eff&i6; label I&i1&i2&i3&i4&i5&i6= "&&eff&i1*&&eff&i2*&&eff&i3*&&eff&i4*&&eff&i5*&&eff&i6"; %if (&k>=7) and (&i1<&k-5) and (&i2<&k-4) and (&i3<&k-3) and (&i4<&k-2) and (&i5<&k-1) and (&i6<&k) %then %do; I1234567=&eff1*&eff2*&eff3*&eff4*&eff5*&eff6*&eff7; label I1234567= "&eff1*&eff2*&eff3*&eff4*&eff5*&eff6*&eff7"; %end; %end; %end; %end; %end; %end; %end; %end; %end; %end; %end; %end; run; goptions reset=(symbol title); data cont; set out1; run; proc contents data=cont out=cont noprint; run; data cont; set cont; keep name label; run; proc print data=cont; title 'THE NAMES USED IN DATA SET VS THE REAL NAMES'; run; goptions reset=(symbol title); %main1: proc sort data=out1 out=out2; by &hiname &viname; run; * DISPLAY THE PLOT SHOWING THE INTERACTION EFFECTS; goptions reset=(symbol title); /* symbol1 color=red i=j line=1 value=circle; symbol2 color=blue i=j line=2 value=triangle; symbol3 color=green i=j line=3 value=star; */ symbol1 color=red i=j line=1 value=circle; symbol2 color=blue i=j line=2 value=triangle; symbol3 color=green i=j line=3 value=star; symbol4 color=gray line=4 i=j v=square; symbol5 i=j c=p line=5 v=diamond; symbol6 i=j c=o line=6 v=hash; symbol7 i=j c=y line=7 v=dot; symbol8 i=j c=br line=8 v='_'; symbol9 i=j c=magenta line=9 v='"'; symbol10 i=j c=steel line=10 v=':'; symbol11 i=j c=red line=11 v='='; symbol12 i=j color=blue line=12 value=circle; symbol13 i=j color=green line=13 value=triangle; symbol14 i=j c=gr line=14 v=star; symbol15 i=j c=p line=15 v=square; symbol16 i=j c=o line=16 v=diamond; symbol17 i=j c=y line=17 v=hash; symbol18 i=j c=br line=18 v=dot; symbol19 i=j c=magenta line=19 v='_'; symbol20 i=j c=steel line=20 v='"'; symbol21 i=j c=red line=21 v=':'; symbol22 i=j c=blue line=22 v='='; symbol23 i=j color=green line=23 value=circle; symbol24 i=j c=gr line=24 v=triangle; symbol25 i=j c=p line=25 v=star; symbol26 i=j c=o line=26 v=square; symbol27 i=j c=y line=27 v=diamond; symbol28 i=j c=br line=28 v=hash; symbol29 i=j c=magenta line=29 v=dot; symbol30 i=j c=steel line=30 v='_'; symbol31 i=j c=red line=31 v='"'; symbol32 i=j c=blue line=32 v=':'; symbol33 i=j color=green line=33 value='='; symbol34 i=j color=gr line=34 value=circle; symbol35 i=j c=p line=35 v=triangle; symbol36 i=j c=o line=36 v=star; symbol37 i=j c=y line=37 v=square; symbol38 i=j c=br line=38 v=diamond; symbol39 i=j c=magenta line=39 v=hash; symbol40 i=j c=steel line=40 v=dot; symbol41 i=j c=red line=41 v='_'; symbol42 i=j c=blue line=42 v='"'; symbol43 i=j color=green line=43 value=':'; symbol44 i=j color=gr line=44 value='='; symbol45 i=j c=p line=45 v=circle; symbol46 i=j c=o line=46 v=triangle; symbol47 i=j c=y line=47 v=star; symbol48 i=j c=br line=48 v=square; symbol49 i=j c=magenta line=49 v=diamond; symbol50 i=j c=steel line=50 v=hash; proc means data=out2 noprint; var &resp; output out=outp mean=response; by &hiname &viname; run; proc gplot data=outp; title color=green height=4 pct "INTERACTION PLOT"; plot response*&hiname=&viname; run; goptions reset=(symbol title); %display iplot.qpmore; %let inout=&inout1; %let inout1=; %if &inout=0 %then %goto finish; %display iplot.inames; %let hiname=&hiname1; %let hiname1=; %let viname=&viname1; %let viname1=; %goto main1; %goto finish; %err: %display iplot.error; %goto choice; %finish: %mend iplots; %iplots;