Using SGPLOT, it is not possible to have overlaid bars to be positioned side by side. However, if you are using SAS 9.2M3 (released recently), you can use GTL to have overlaid bars be placed side by side using the new DISCRETEOFFSET option for discrete date.
Normally, each bar is placed centered on the midpoint, with a default barwidth of 0.85 (85% of the mid point spacing). With SAS 9.2M3, you can specify a DISCRETEOFFSET=fraction (-0.5 to +0.5). This offsets the bars for that statement to left or right of the midpoint. Simultaneously, you can adjust the bar width to a smaller value.
Example:
BarChart x=x y=y1 / discreteoffset=-0.25 barwidth=0.5;
BarChart x=x y=y2 / discreteoffset= 0.25 barwidth=0.5;
SeriesPlot x=x y=Y3;
This will cause the bars from the two statements to appear side by side and touching.If you don't want them to touch, reduce the bar width a bit. Since no discreteoffset is specified for SeriesPlot, it will still be drawn with points at the X midpoints. It can be shifted too if needed. SeriesPlot does not summarize data. If you have one value per category of X, you are fine. Else, you have to summarize the data.
Use the tmplout='filename' option to get the GTL template from your SGPLOT step. Then, add the above options to the syntax, and run the template using the sgrender procedure. Template name is on the "Define Statgraph templatename;" statement.
proc sgrender data=foo template=templatename;
run;