I suspect that the problem is that you do not have constant weights for each PSU. You can check this by summarizing the weight variable by the idhspsu - the minimum and the maximum should be identical in all cases. For example:
Be warned that the output is going to be very long, and you probably want to capture the output and process it to find if there are PSUs where the weight is not a constant.
by idhspsu: summ weight
An alternative way of doing the same is:
Any case where dif equals 1 indicates a PSU where the weight is not constant.
gen dif = 0
replace dif = 1 if idhspsu == idhspsu[_n-1] & weight != weight[_n-1]
browse if dif == 1