A brief reading of your code shows about 20 data steps and one call to proc surveyselect. So the topic likely should not be "optimize surveyselect".
You code also does not include
1) definition of apparently multiple formats that start &ZIP used in $zip&popyr.fips
2) definition of a macro used in multiple places %dsobs
I would be examining the LOG to see which steps are taking the most time and see if those can be addressed.
I am wondering if your data is actually so volatile with zipcodes and generated Fips code values that those steps need to be rerun all the time. Perhaps you should segregate that and only recreate that when something in your data indicates it needs to update. You don't mention the size of files but I think there is a lot of redundant and likely inefficient code just with those steps.
... View more