Я собираюсь догадаться, что «игнорирование пропущенных значений» означает «обрабатывать их как нули».Если у вас есть другая идея, вы должны сделать это явно.
Это может быть
gen new_var = (cond(missing(X), 0, 3 * X) ///
+ cond(missing(Y), 0, 2 * Y) ///
+ cond(missing(Z), 0, 4 * Z)) / 7
Давайте посмотрим на ваши решения и объясним, почему они все не правы в целом или обычно.
(cond(missing(X*3),., X) + cond(missing(Y*2),., Y))/7
Достаточно отметить, что если верно, что X
отсутствует, то cond()
приводит к отсутствию, тогда как X * 3
также отсутствует.Такое же замечание относится к терминам, включающим Y
и Z
.Таким образом, вы заменяете все пропущенные значения пропущенными значениями, а это не выгода.
!missing(X*3+Y*2+Z*4)/7
Учитывая информацию о том, что по крайней мере один из X Y Z
всегда отсутствует, это значение всегда равно 0/7 или 0. Даже если бы X Y Z
не было пропущено, тогда он оценил быдо 1/7.Это далеко от суммы, которую вы хотите.missing()
всегда дает 1 или 0, а его отрицание, таким образом, 0 или 1.
(max(X, Y, Z)/7) if missing(X , Y, Z)
Максимум X
, Y
, Z
будет правильным ответом, если и только если одиниз значений не пропущены, а два других отсутствуют.max()
в максимально возможной степени игнорирует пропуски (даже если в других контекстах пропуски рассматриваются как произвольно большие положительные числа).