For the SURVEY procedures in SAS (e.g. PROC SURVEYMEANS, PROC SURVEYFREQ,...), the documentation says "If an observation has a weight that is nonpositive or missing, then the procedure omits that observation from the analysis".
However, this can give incorrect standard errors when enough PSUs and Stratums from the sampling design are removed due to persons with zero weight. In fact, the DOMAIN statement exists for this precise purpose, in order to keep all observations in the analysis rather than subsetting with a WHERE statement and removing valuable information for standard error estimation. However, persons with zero weight are removed from the dataset before DOMAIN is implemented. Thus, using DOMAIN in this case is moot.
Currently, the only solution I've come across is to either change the weight from zero to a very small positive number (e.g. 1E-60), or to set it to a positive number (e.g. 1) and flag this group with an indicator variable, which is then used in the DOMAIN statement.
It would be nice to have a simple option in the SURVEY procedures which wouldn't require editing the original dataset in order to get the correct standard errors.