* Has Igratio within program; libname in1 "."; options linesize=78; options pagesize=60; title1 'Crystalized Sociogram of Ties'; title2 'Distances within and between subgroups are not comparable'; title3 'see readig'; *Richard: ask user source for data indicating ties. Replace all inlist.list with filename given by user; data athree; *TAG1; infile "C:\newkliqfind\ffe.list" missover; input chooser chosen wexch; if chosen ne 99999; proc sort; by chooser chosen; data bthree; infile "C:\newkliqfind\ffe.list" missover; *ENDTAG1; input chosen chooser bwexch; if chooser ne 99999; proc sort; by chooser chosen; data nthree; merge athree bthree; by chooser chosen; if (0 < wexch < bwexch) then sexch=-1; if (wexch=bwexch) and (chooser > chosen) then wexch=-1; data adjust; infile "C:\newkliqfind\inlist.xadjust" missover; input group addx addy breg ereg multrad labelx labely; *labelx=labelx+addx; *labely=labely+addy; xyadjust=0; useadj=0; if useadj ne 1 then do; addx=0; addy=0; breg=0; ereg=0; multrad=1; labelx=0; labely=0; end; *Richard: Ask the user if they want to manually reposition any groups. If yes, then remove the *'s from the lines below and for each group (will have to find the number of groups from KliqueFinder output or inlist.bcord) ask change vertically (y) by how much (negative numbers indicate down, positive indicate up)? Change horizontally (x) by how much (negative numbers indicate left, positive indicate right)? Then do for each group:; *TAG2; *if group=?? Then addx= ; *if group=?? then addy= ; *ENDTAG2; *Richard: Ask the user if they want to manually reposition the label for each group relative to where the group is plotted. If yes, remove the *'s form the lines below and then for each group ask move the label vertically(y) how much (negative numbers indicate down, positive indicate up)? Change horizontally (x) by how much (negative numbers indicate left, positive indicate right)? Then do for each group:; *TAG3; *if group=?? then labelx= ; *if group=?? Then labely= ; *ENDTAG3; if multrad =. then multrad=1; if labelx=. then labelx=0; if labely=. then labely=0; breg=breg*6.28318/360; ereg=ereg*6.28318/360; proc sort; by group; data one; attrib zgroup length=$5; *TAG4; infile "C:\newkliqfind\ffe.li.bcord" missover; *input dgroup 1-5 (group anchor angle radius hier gdim2 gdim1 warp) (2*10., 5*10.5, 1*20.10) ; *input dgroup 1-5 group 6-15 anchor 16-25 angle 26-35 radius 36-45 ihier 46-55 gdim2 56-65 gdim1 66-75 warp 76-95; input dgroup group anchor angle radius ihier gdim2 gdim1 warp; retain mind1 maxd1 mind2 maxd2; if _n_ =1 then do; mind1=9999; mind2=9999; maxd1=-9999; maxd2=-9999; end; if gdim1 < mind1 then mind1=gdim1; if gdim1 > maxd1 then maxd1=gdim1; if gdim2 < mind2 then mind2=gdim2; if gdim2 > maxd2 then maxd1=gdim2; if group > 0; if angle < 0 then angle=6.28318+angle; if group=10 then cgroup='J'; if group=1 then cgroup='A'; if group=2 then cgroup='B'; if group=3 then cgroup='C'; if group=4 then cgroup='D'; if group=5 then cgroup='E'; if group=6 then cgroup='F'; if group=7 then cgroup='G'; if group=8 then cgroup='H'; if group=9 then cgroup='I'; if group=11 then cgroup='K'; if group=12 then cgroup='L'; if group=13 then cgroup='M'; if group=14 then cgroup='N'; if group=15 then cgroup='O'; if group=16 then cgroup='P'; if group=17 then cgroup='Q'; if group=18 then cgroup='R'; if group=19 then cgroup='S'; if group=20 then cgroup='T'; if group=21 then cgroup='U'; if group=22 then cgroup='V'; if group=23 then cgroup='W'; if group=24 then cgroup='X'; if group=25 then cgroup='Y'; if group=26 then cgroup='Z'; if group=27 then cgroup='a'; if group=28 then cgroup='b'; if group=29 then cgroup='c'; if group=30 then cgroup='d'; if group=31 then cgroup='e'; if group=32 then cgroup='f'; if group=33 then cgroup='g'; if group=34 then cgroup='h'; if anchor=0 then zgroup=trim(left(cgroup)); if anchor =1 then zgroup=trim(left(cgroup)) || "*"; bsize=1; kgsize=5; drop angle radius ihier dgroup; proc sort; by group; data bg; merge one(in=yp) adjust; * dgrtext; by group; if yp; *endsas; gdim1=gdim1+addx; gdim2=gdim2+addy; ldim1=gdim1+labelx; ldim2=gdim2+labely; array atext {20} $20 grtext01-grtext20; gbot=1; gtop=6; if gbot > gtop then do; tz=gtop; gtop=gbot; gbot=tz; end; gdiam=.75; step=gdiam/(gtop-gbot); gsize=.5; *Richard: Ask user if they want group labels, wantglab=1 for yes, wantglab=0 for no. Default is 1.; *TAG5; wantglab=1; if xyadjust=1 then gdim1=gdim1*11/7; file "forout"; extra=0; if wantglab=1 then do; put "label" @9 "2" @11 "2" @13 ldim1 8.4 @23 ldim2 8.4 @33 bsize 2. @36 zgroup $ ; extra=1; end; wantgtxt=0; toler=.01; *endsas; if wantgtxt=1 then do; topstep=gdim2+(int(gtop-gbot+extra)/2)*step; do i=gbot to gtop; if atext{i} ne "" then do; *zi=i; *if (zi ge int((gtop-gbot)/2)) and (wantglab=1) then zi=zi+1; tstep=topstep-(i-gbot)*step; if ((tstep-ldim2) < (step-toler)) and (wantglab=1) then tstep=tstep-step; put "label" @9 "2" @11 "2" @13 gdim1 8.4 @23 tstep 8.4 @32 gsize 5.2 @38 atext{i} $ 30.; end; end; end; *proc print; *endsas; data indplace; attrib cperson length=$5; *TAG6; infile "C:\newkliqfind\ffe.li.bicrd" missover; *input group 1-5 person 6-15 anchor 16-25 angle 26-35 radius 36-45 ihier 46-55 idim2 56-65 idim1 66-75 warp 76-95; input group person anchor angle radius ihier idim2 idim1 warp; * (2*10., 5*10.5, 1*20.10) ; *(2*10., 5*10.5, 1*20.10) ; if group > 0; cperson=person; if angle < 0 then angle=6.28318+angle; chooser=person; *proc print; proc sort; by group; proc means data=indplace; var idim1 idim2; output out=fordim min=mindim1 mindim2 max=maxdim1 maxdim2; data makearea; set fordim; totarea=abs(maxdim1-mindim1)*abs(maxdim2-mindim2); longdim=abs(maxdim2-mindim2); if abs(maxdim1-mindim1) > longdim then longdim=abs(maxdim1-mindim1); dummy=1; proc print; var totarea; proc means noprint data=indplace; by group; var radius; output out=trad max=trad mean=rad; proc means data=trad; var rad; output out=minmaxr min=minmaxr mean=meanrad; data minr; set minmaxr; minrad=minmaxr; dummy=1; proc print; data tempbg; set bg; dummy=1; data bg2; merge tempbg minr makearea; by dummy; proc print; data haveplc; merge indplace(in=realg) bg2; * betmin2(in=extreme); by group; igratio=1.0; autig=(3.14159*minrad*minrad)/(.01*totarea); autig2=20*meanrad/(1.4*longdim); autig3=200*meanrad/(1.4*longdim); useig=1; *Richard: ask the user by what factor to increase subgroup areas as plotted. Input changeig; *Could do separately by group: if group=?? Then changeig=??; *TAG7; changeig=1.000000; igratio=autig2/changeig; if _n_ = 1 then do; direct="inflated"; if igratio > 1 then direct="reduced"; changei=1/igratio; file "readig"; put @1 "The distances within and between subgroups are not comparable."; put @1 "The distances within subgroups have been " direct $ "by a factor" ; put @1 "of" changei 10.5; put @1 "This corresponds to an igratio of" igratio 10.5 ; end; if useig=1 then do; radius=radius/igratio; idim1=gdim1+radius*cos(angle); idim2=gdim2+radius*sin(angle); end; groupdrw=0; if realg; * or extreme; if xyadjust=1 then idim1=idim1*11/7; *idim1=idim1+addx; *idim2=idim2+addy; lsize=.5; ltype=2; badreg=ereg-breg; little=.02; *bradius=1.5*radius; bradius=.5; if angle < 0 then angle=6.28318+angle; if angle > 6.28318 then angle=angle-6.28318; kangle=angle; zincrem=.02; pidx=idim1; pidy=idim2; zidx=idim1; zidy=idim2; pidx=gdim1+(radius+zincrem)*cos(angle); pidy=gdim2+(radius+zincrem)*sin(angle); zidx=gdim1+(radius+2*zincrem)*cos(angle); zidy=gdim2+(radius+2*zincrem)*sin(angle); idx=idim1+little; idy=idim2+little; if angle ge breg then kangle=kangle+badreg; tx2=gdim1+bradius*multrad*cos(kangle); ty2=gdim2+bradius*multrad*sin(kangle); if (radius=0) and (angle=0) then do; tx2=gdim1; ty2=gdim2; end; if kangle > 3.14159 then nego=1; dim1=idim1; dim2=idim2; extdim1=tx2; extdim2=ty2; chooser=person; proc means data=haveplc noprint; by group; var radius; output out=withrad max=maxrad; proc sort data=haveplc; by chooser; *proc print data=haveplc; proc means noprint; var idim1 idim2 group; output out=imin min=imind1 imind2 mingroup max=imaxd1 imaxd2 maxgroup; data betmin; set imin; group=maxgroup; diffend=abs(imind1)-abs(imaxd1); diffend=0; if diffend > 0 then do; imind1=imind1+diffend/2; imaxd1=imaxd1+diffend/2; end; if diffend < 0 then do; imind1=imind1-diffend/2; imaxd1=imaxd1-diffend/2; end; diffend=abs(imind2)-abs(imaxd2); diffend=0; if diffend > 0 then do; imind2=imind2+diffend/2; imaxd2=imaxd2+diffend/2; end; if diffend < 0 then do; imind2=imind2-diffend/2; imaxd2=imaxd2-diffend/2; end; range1=imaxd1-imind1; range2=imaxd2-imind2; ratior=7/8.75; if range1 > range2 then do; %let bigr=1; lrange=range1; diffr=(ratior*range1-range2)/2; if diffr > 0 then do; imind2=imind2-diffr; imaxd2=imaxd2+diffr; end; if diffr < 0 then do; imind1=imind1-diffr; imaxd1=imaxd1+diffr; end; end; if range1 le range2 then do; %let bigr=2; lrange=range2; diffr=(ratior*range2-range1)/2; if diffr > 0 then do; imind1=imind1-diffr; imaxd1=imaxd1+diffr; end; if diffr < 0 then do; imind2=imind2-diffr; imaxd2=imaxd2+diffr; end; end; xpct=.025; imind1=imind1-range1*xpct; imaxd1=imaxd1+range1*xpct; imind2=imind2-range2*xpct; imaxd2=imaxd2+range2*xpct; file "corners"; maxgroup=maxgroup+1; put (maxgroup imind1 imind2) (10.5); maxgroup=maxgroup+1; put (maxgroup imind1 imaxd2) (10.5); maxgroup=maxgroup+1; put (maxgroup imaxd1 imind2) (10.5); maxgroup=maxgroup+1; put (maxgroup imaxd1 imaxd2) (10.5); one=1; file "ranges"; put one 1-5 lrange 6-15; data withrang; infile "ranges"; input dummy 1-5 arange 6-15; arange=1.2*arange; data betmin2; length xsys $ 1; length ysys $ 1; infile "corners"; input (group gdim1 gdim2)(10.5); radius=.01; maxrad=radius; white=1; xsys="2"; ysys="2"; proc sort; by group; *title3 'after ig'; *var chooser idim1 idim2 gdim1 gdim2 group radius angle; *Richard: ask user if they want a character variable from another sas data file to be used. If yes, obtain the name of the character string, the name of the ID, the path in which the file is located, and the file name. Then use the following code, replacing [filename], [idname] and [stringdata] with the responses provided by the user (look for the "endcode"); *TAG8; libname outpath "C:\newkliqfind\"; data backg; attrib chooser length=8.0; set outpath.ffe; chooser=chooser; cperson=perchar; proc sort; by chooser; data winfo; attrib cperson2 length=$15; merge haveplc backg (in=havemag); by chooser; *end code*; *if the above are uncommented, comment the next 3; *data winfo; *attrib cperson2 length=$15; *set haveplc; *ENDTAG8; * merge haveplc in1.backg (in=havemag); *by chooser; *end replace; yesmag=1; *if havemag then yesmag=1; cperson2=cperson; *if yesmag=0 then cperson2="**"; *merge haveplc info; *by person; array klabel {24} $20 gtext01-gtext24; range=2; if range=1 then do; ktop=6; kbottom=1; end; if range=2 then do; kbottom=7; ktop=13; end; if range=3 then do; kbottom=14; ktop=21; end; howmany=ktop-kbottom+1; labsize=.50; lnsize=.50; ltinfo=33; nothing="."; kincrem=.03; kextd2=extdim2; if nego=1 then kextd2=extdim2-(howmany-1)*kincrem; kextd1=extdim1; if abs(extdim2-dim2) < .03 then do; if dim1 > extdim1 then kextd1=extdim1-.10; if dim1 le extdim1 then kextd1=extdim1+.10; end; wanttext=0; file "forout3"; if wanttext=1 then do; do i=ktop to kbottom by -1; ndim2=kextd2+(ktop-i)*kincrem; if klabel{i}="" then klabel{i}="--"; if kextd1 ne . and ndim2 ne . then put "label" @9 "2" @ 11 "2" @13 kextd1 8.4 @23 ndim2 8.4 @33 labsize 4.2 @38 klabel{i} $ 20.; end; if zidx ne . and zidy ne . then put "move" @9 "2" @11 "2" @13 zidx 8.4 @22 zidy 8.4 @31 lnsize 4.2; if extdim1 ne . and extdim2 ne . then put "draw" @9 "2" @11 "2" @13 extdim1 8.4 @22 extdim2 8.4 @31 lnsize 4.2 @36 nothing $ 2. @ 39 ltinfo 5.2; end; *Richard: Ask use if they want information about each actor (as ID or otherwise) printed out. If yes, wantnum=1, 0 otherwise; *TAG10; wantnum=1; if wantnum=1 then do; *Richard: ask user by what factor to increase size of ID as printed. Input idinc; *TAG11; idinc=1.000000; idsize=1.5*idinc; if pidx ne . and pidy ne . then put "label" @9 "2" @11 "2" @13 pidx 8.4 @22 pidy 8.4 @33 idsize 4.2 @38 cperson2 $ 15.; end; *proc print; data four; merge haveplc(in=havep) nthree (in=wantit); by chooser; groupch1=group; drop group; if wantit and havep; xg1=idim1; yg1=idim2; if groupdrw=1 then do; xg1=idim1; yg1=idim2; end; drop idim1 idim2; *proc print; data five ; set four; person=chosen; proc sort; by chosen; data bsix; merge haveplc five (in=want); by person; groupch2=group; if want; tempg=1000*chooser+chosen; *only in group; *if groupch1 ne groupch2; *if groupch1 = groupch2; if groupch1 ne groupch2 then kline=34; if groupch1 = groupch2 then kline=1; xg2=idim1; yg2=idim2; if groupdrw=1 then do; xg2=idim1; yg2=idim2; end; diffy=yg2-yg1; diffx=xg2-xg1; dist=sqrt(diffy**2+diffx**2); dummy=1; proc sort; by tempg; proc means noprint data=bsix; id dummy; var dist; output out=mindist min=mindist; data six; merge withrang bsix mindist; by dummy; data seven; set six; by tempg; if first.tempg; size=1; groupid="a"; if diffy =0 then do; if diffx > 0 then rotate=90; if diffx < 0 then rotate=270; end; if diffy ne 0 then do; deltaa=round(((atan(diffx/diffy))*(6/7)*360/6.283),1); if (diffx > 0) and (diffy > 0) then rotate=180-deltaa; if (diffx < 0) and (diffy < 0) then rotate=360-deltaa; if (diffx < 0) and (diffy > 0) then rotate=180-deltaa; if (diffx > 0) and (diffy < 0) then rotate=360-deltaa; end; if rotate < 0 then rotate=360+rotate; if rotate > 360 then rotate=rotate-360; tki=rotate*6.283/360; if tki > 3.14159 then twi=6.283-twi; *if (0 le rotate < 90) then arrow="L"; *if (90 le rotate < 180) then do; *arrow="J"; *rotate=rotate-90; *end; *if (180 le rotate < 270) then do; *arrow="K"; *rotate=rotate-180; *end; *if (270 le rotate le 360) then do; *arrow="I"; *rotate=rotate-270; *end; if (345 le rotate < 360) or ( 0 le rotate < 15) then do; arrow="D"; if rotate > 45 then rotate=rotate-360; end; if (15 le rotate < 45) then do; arrow="A"; rotate=rotate-30; end; if (45 le rotate < 75) then do; arrow="C"; rotate=rotate-60; end; if (75 le rotate < 105) then do; arrow="B"; rotate=rotate-90; end; if (105 le rotate < 135) then do; arrow="D"; rotate=rotate-120; end; if (135 le rotate < 165) then do; arrow="A"; rotate=rotate-150; end; if (165 le rotate < 195) then do; arrow="C"; rotate=rotate-180; end; if (195 le rotate < 225) then do; arrow="B"; rotate=rotate-210; end; if ( 225 le rotate < 255) then do; arrow="D"; rotate=rotate-240; end; if (255 le rotate < 285) then do; arrow="A"; rotate=rotate-270; end; if (285 le rotate < 315) then do; arrow="C"; rotate=rotate-300; end; if (315 le rotate < 345) then do; arrow="B"; rotate=rotate-330; end; tu=.50; *rotate=rotate+90; posx1=xg2-(diffx/(2+tu)); posx2=xg2-2*diffx/3.000; posy1=yg2-(diffy/(2+tu)); posy2=yg2-2*diffy/3.000; *trange=&lrange2; *if &lrange1 > &lrange2 then trange=&lrange1; *Richard: ak controls the distance from the endpoint of a line to an id number. The user could be asked to specify: by what factor should the distance between line endings and id numbers be changed? Input akinc (default is 1).; *TAG12; akinc=1.000000; ak=akinc*mindist/5; *2/log(arange); ak2=ak; headarrw=1; if headarrw=1 then do; if groupch1 ne groupch2 then ak=3*ak/2; *ak2=3*ak/2; end; if abs(diffx) > 0 then slope=diffy/diffx; if diffx=0 then slope=999999; ksign=-1; if slope > 0 then ksign=1; addsub=-1; if diffx > 0 then addsub=1; *if diffx=0 then addsub=0; supx=addsub*ak/sqrt(slope**2 + 1); supx2=addsub*ak2/sqrt(slope**2 +1); tarrowx=xg2-supx; parrowx=xg1+supx; if diffx=0 then do; tarrowx=xg2; parrowx=xg1; end; tarrowy=yg2-supx*slope; parrowy=yg1+supx*slope; if headarrw=1 then do; posx1=tarrowx; posy1=tarrowy; end; zero=0; sizea=1.0; lsize=1.0; awsize=.7; lnsize=.2; labsize=.75; wincrem=.05; if diffx > diffy then do; if xg1 > xg2 then wy=posy1+wincrem; if xg1 le xg2 then wy=posy1-wincrem; wx=posx1; end; if diffx le diffy then do; if yg1 > yg2 then wx=posx1+wincrem; if yg1 le yg2 then wx=posx1-wincrem; wy=posy1; end; ltwithin=1; idsize=.75; *Richard: if the user wants arrows to indicate direction of tie then *wantarrw=1, else wantarrw=0; *TAG13; wantarrw=0; *Richard: if user wants the thickness of the line to represent the weight of *the tie, then wantwt=1, else wantwt=0; *TAG14; wantwt=1; *Richard: if the user wants lines indicating presence of ties between actors *then wantline=1, else wantline=0; *TAG15; wantline=1; totline=1; if wantwt=1 then totline=wexch; *Richard: the user should be asked: By what factor would you like to change the thickness of the lines Then input thickd. Default is 1.; *TAG16; thickd=1.000000; extrad=thickd*.04; file "forout2"; odd=0; *if wexch/2 > int(wexch/2) then odd=1; if (wantline=1) and (wexch ge 0 ) then do; pax=parrowx; pay=parrowy; tax=tarrowx; tay=tarrowy; do i=1 to totline; thisd=extrad*(i-totline/2 +.5); parrowx=pax+thisd*cos(tki); parrowy=pay+thisd*sin(tki); tarrowx=tax+thisd*cos(tki); tarrowy=tay+thisd*sin(tki); if parrowx ne . and parrowy ne . then put "move" @9 "2" @11 "2" @13 parrowx 8.4 @22 parrowy 8.4 @31 lnsize 4.2 @36 groupid $ 2.; if tarrowx ne . and tarrowy ne . then put "draw" @9 "2" @11 "2" @13 tarrowx 8.4 @22 tarrowy 8.4 @31 lnsize 4.2 @36 groupid $ 2. @ 39 kline 5.2; end; end; if (wantarrw=1) and (abs(wexch) > 0) then if posx1 ne . and posy1 ne . then put "label" @9 "2" @11 "2" @13 posx1 8.4 @23 posy1 8.4 @ 32 awsize 3.1 @36 arrow $ 2. @ 39 ltwithin 2. @ 42 rotate 10.5 @55 "5" @60 "marker"; *if wantwt=1 then put "label" @9 "2" @11 "2" @13 wx 8.4 @23 wy 8.4 @ 32 labsize 4.2 @36 wexch 2. @ 39 ltwithin 3.1 @ 42 zero 10.5 @55 "5"; *proc print; *var xg1 yg1 xg2 yg2 supx addsub slope parrowx parrowy tarrowx tarrowy; proc univariate plot; var rotate; *endsas; *proc print; *var chooser chosen diffy diffx deltaa rotate increm; data anno ;*(keep=x y xsys ysys function text); set bg; length function $ 8.; length text $ 10.; xsys='8'; ysys='8'; size=.0001; x=gdim1; y=gdim2; function='symbol'; text=cgroup; data legn; length text $ 20; length function $ 8; * length position $ 1; length xsys $ 1; length ysys $ 1; infile "forout" missover; input function $ xsys $ ysys $ x y size text $ ; data legn3; length text $ 20; length function $ 8; * length position $ 1; length xsys $ 1; length ysys $ 1; infile "forout3" missover; input function $ xsys $ ysys $ x y size text $ line ; *proc print; data legn2; length position $ 1; length text $ 20; length function $ 8; length xsys $ 1; length ysys $ 1; infile "forout2" missover; input function $ xsys $ ysys $ x y size text $ line rotate position $ style $ ; position="5"; *proc print; *endsas; data legn3; set legn legn3 legn2; text=trim(left(text)); *proc print; run; data tanno; merge bg withrad betmin2(in=fromcorn); by group; wantcorn=1; if (wantcorn=0) and fromcorn then delete; dummy=1; data outanno; merge tanno withrang; by dummy; if &bigr=1 then do; tdim=gdim1; gdim1=gdim2; gdim2=tdim; end; diam=(1.2*maxrad)*40/arange; *kbsize=750/arange; if white=1 then diam=.0001; *Richard: ask the user by what factor to increase the sizes of the subgroup *boundaries as plotted. Input changedi; *TAG17; changedi=1.000000; *Could do separately for each group: if group =?? Then changedi=; Diam=diam*changedi; filename plotme 'C:\newkliqfind\ffe.eps'; *goptions device=tek4010; goptions device=psepsf gaccess=sasgaedt gsflen=78 gsfname=plotme gepilog='showpage' gsfmode=replace hsize=7in vsize=9.5in; symbol L=33; *proc print; *var group gdim1 gdim2; *proc gdevice; * rotation=2; * hpos=50 vpos=90; * hsize=11 IN vsize=18 IN; * xmax=11in ymax=18in; proc gplot data=outanno annotate=legn3; symbol1 i=none value="." ; *Richard: ask if user wants to specify dimensions of x and y manually. If yes, then ask for the low, the high, and the spacing between tick marks for each axis. Then replace the following two lines with the lines that are commented out. Note x axis is axis 1.; *TAG18; axis1 label=('Dimension 1') major=(n=12); axis2 label=('Dimension 2') major=(n=18); *axis1 order=(-15 to 16 by 1) major=none minor=none label=none; *axis2 order=(-22 to 20 by 1) major=none minor=none label=none; *axis1 order=(-1.2 to .8 by .1) major=none minor=none label=none; *axis2 order=(-.9 to 1.1 by .1) major=none minor=none label=none; *axis2 order=(-2.00 to 1.25 by .25) major=none minor=none label=none; *axis2 order=(-2.00 to .75 by .25) major=none minor=none label=none; *axis2 order=(-3.0 to 3.0 by .25) major=none minor=none label=none; *axis2 order=(-4.5 to 4.5 by .25) major=none minor=none label=none; *axis1 order=(-20 to 20 by 4) major=none minor=none label=none; *axis2 order=(-20 to 20 by 4) major=none minor=none label=none; *axis1 order=(-75 to 75 by 10) major=none minor=none label=none; *axis2 order=(-75 to 75 by 10) major=none minor=none label=none; *axis2 label=none value=(h=1.0 t=1 'Teachers feel they' j=c 'make a difference' t=2 'Teachers feel competent' t=3 'Reform has changed' j=c 'my teaching' t=4 'Reform will change' j=c 'my teaching') minor=none style=0; */ *legend1 label=('Status' h=1) across=2 value=( j=l h=1); footnote1 j=l h=1 ' ___ within subgroups, ... between subgroups, thickness = frequency'; footnote2 j=l h=1 ' Scale is variable, see readig'; * footnote2 j=l h=1 '* Indicates Subgroup or Actor is an Anchor in the Scaling'; *bsize=gsize if you want it variable, bsize=kgsize if you want it fixed; bubble gdim2*gdim1=diam / frame bsize=25 annotate=anno haxis=axis1 vaxis=axis2; run; * vaxis=axis1 haxis=axis2 legend=legend1;