It looks to me like the -svy- commands do, in fact, return the df in e(df_r).
This df is, in fact, e(N_psu) - e(N_strata). But you can just grab e(df_r).
This is the case for -svymean-, -svyratio- and -svytotal- if the user
specifies the -complete- option. However, if the user specifies the
-available- option, then the number of PSUs can be different for different
parameters, and therefore the degrees of freedom is a vector (with the same
dimensions as the estimated parameter), and its value can be calculated
from the estimation results by the command