Derivation
variable: idspouse (table[s]: gen_spouse)
This is mostly the spouse id variable as recorded reshaped wide by interview (so it repeats, idspouse1, idspouse2 etc.), but the code 'noid' is added when a spouse is reported but id not recorded.
replace idspouse="noid" if _m~=1 & idspouse==""
replace idspouse="" if idspouse~="noid" | marital~=1
bys ident intdate idspouse: gen n=_n
tostring n, replace
replace idspouse=idspouse+n if idspouse=="noid"
bys ident intdate (idspouse): gen n=_n
reshape wide idspouse, i(ident intdate) j(n)