Following is a response from Senior DHS staff member, Tom Pullum:
I used the following Stata code to check whether there are any discrepancies between the v20* variables and the b4* and b5* variables in terms of the numbers of sons and daughters who are alive or dead. I get perfect agreement. I used b5 rather than b7, but b5 and b7 should agree, in that b7 is <. If the child died (b5=0). However, b7=. could mean either that the child survived (b5=0) or there was no birth for the specified value of bidx (b5=.) Can you check again?
use v20* b4* b5* using "...IAIR52FL.dta", clear
rename *_0* *_*
gen v20sons_alive=v202+v204
gen v20dtrs_alive=v203+v205
gen sons_alive=0
gen dtrs_alive=0
gen sons_died=0
gen dtrs_died=0
forvalues li=1/16 {
scalar si=`li'
scalar list si
replace sons_alive=sons_alive+1 if b4_`li'==1 & b5_`li'==1
replace dtrs_alive=dtrs_alive+1 if b4_`li'==2 & b5_`li'==1
replace sons_died=sons_died+1 if b4_`li'==1 & b5_`li'==0
replace dtrs_died=dtrs_died+1 if b4_`li'==2 & b5_`li'==0
}
tab v20sons_alive sons_alive
tab v20dtrs_alive dtrs_alive
tab v206 sons_died
tab v207 dtrs_died
gen d1=v20sons_alive-sons_alive
gen d2=v20dtrs_alive-dtrs_alive
gen d3=v206-sons_died
gen d4=v207-dtrs_died
tab1 d1 d2 d3 d4