Your example data implies that you want the beginning of the month for two months prior and two months after the date. If that is the complete rule then this does that:
format newcaldt date9.;
do i=-2 to 2;
I left in the original date variable so you could verify what is going on.
SAS INNOVATE 2024
Registration is open! SAS is returning to Vegas for an AI and analytics experience like no other! Whether you're an executive, manager, end user or SAS partner, SAS Innovate is designed for everyone on your team. Register for just $495 by 12/31/2023.
If you are interested in speaking, there is still time to submit a session idea. More details are posted on the website.