These will give you the same results (see Joins.pdf):
proc sql;
CREATE TABLE test3 AS
select T.id, T.Month, M.name, M.sex, M.DOB, M.Age
from test2 as T full join MonthlyData as M
on T.Month=M.Month
and T.id=M.id
order by id, Month; quit;
proc sql;
CREATE TABLE test3 AS
select T.id, T.Month, M.name, M.sex, M.DOB, M.Age
from test2 as T left join MonthlyData as M
on T.Month=M.Month
and T.id=M.id
order by id, Month; quit;
proc sql;
CREATE TABLE test3 AS
select M.name, M.sex, M.DOB, M.Age, T.id, T.Month
from MonthlyData as M right join test2 as T
on T.Month=M.Month
and T.id=M.id
order by id, Month; quit;
However, if you switched things around, you get (see Switched.pdf):
proc sql;
CREATE TABLE test3 AS
select M.name, M.sex, M.DOB, M.Age, T.id, T.Month
from test2 as T right join MonthlyData as M
on T.Month=M.Month
and T.id=M.id
order by id, Month; quit;