As mentioned in the comments, it really depends on how you intend on using your data. That said, one approach is to assign values to your system missings to increase flexibility. I'll riff an example based on your description.
Q1) Please describe your living arrangements.
a. I live alone.
b. I live with family/roommates and am the head of household.
c. I live with family/roommates, but am not the head of household.
[If Q1=a Then skip]
Q2) How many other members, excluding yourself, do you live with?
a. 1 b. 2 c. 3 d. 4 or more
Q3) Are any of these [Q2 count] members non-family roommates?
a. Yes
b. No
Since Q2 is a count of people in household (excluding self), you might recode those living on their own to actually answer the question.
RECODE Q2 (SYSMIS=0).
EXE .
Or if there was a need to differentiate (either because not all SYSMIS
should be 0 or because you want to keep track of why they are 0). In this case you can toggle those missing values on/off as needed.
IF (Q1='a') Q2=0.001 .
EXE .
ADD VALUE LABELS Q2 .001 'Lives Alone' .
MISSING VALUES Q2 (.001) .
For Q3, it really is more of an N/A. In that case you might choose an arbitrary value (-1, 99, etc) for tracking purposes and always keep those missing values set.
If (Q1='a' AND Q3=$SYSMIS) Q3=99 .
EXE .
ADD VALUE LABELS Q3 99 'N/A, lives alone' .
MISSING VALUES Q3 (99) .