As RW9 previously mentioned, it is important to understand the different types of joins with the SQL procedure. From what I understand with your examples (and you may want to post some example data from both data sets to help us understand), but I believe the IPO data set looks to have duplicate values based on the variable Date I, and the Calendar data set seems to have one record per Date L variable. If this is the case and you want to keep all of your records from the IPO data set, I would suggest using IPO as the left data set and doing a left join, as this will keep every record from the IPO data set and bring in values from the Calendar data set where the two dates are matching. The venn diagrams RW9 provided below are a great visual of how the different joins work.
The other thing I noticed were the names of your date variables. If they have spaces in the names from a import procedure, you will need to inclose them between double quotes and the character n at the end. For example Date I would be "Date I"n, otherwise you will get syntax errors. You also need to specify the alias for each data set in your FROM statement as you are using an alias in front of the date variables, but never declared them. Below would provide you every variable from both data sets (you'll get a warning message if you have two or more of the same variable names in each data set, and it will drop one of them); as well as, keep every record from your IPO data set and provide values for the Calendar variables where the Date L variable matches the Date I variable.
Hope this helps!
proc sql;
create table merge1 as
select *
from Ipo as Ipo left join Calendar as Calendar
where Ipo."Date I"n=Calendar."Date L"n
order by Ipo."Date I"n;
quit;
... View more