You could write a little macro that takes 1 parameter (the Senate district), and subsets the data, and draws the map.
Then you could call/run the macro 40 times, each time passing a different senate district (this one's brute force, requiring 40 lines of code ... but is very easy). Since your data isn't changing, this brute force technique isn't too bad.
... or create a data set containing the 40 senate districts, and use a "data step" to loop through all of them, calling the macro & passing a different district to it each time. The coding for this is a little tricky, but if your data was changing (ie, doing different states, with different senate districts, etc) then it would be good to have this programmatically data driven technique, rather than having to hard-code the macro calls each time.