На мой взгляд, это должно быть то же самое, но это не так! Эти два блока кода не приводят к одному и тому же результату, и я не знаю почему.
Единственная разница в том, как я сформулировал условие if
, так что оно сводится к тому,
command var if v1 & v2 ==1
и
command var if v1==1 & v2==1
одинаковы.
Ниже мой исходный код. Все скопировано, кроме условия if
.
forvalues i = 35/99 {
if inlist(`i', 45, 50, 61, 68, 72, 88) continue
recode A`i'_a A`i'_b A`i'_c (.=0) if A`i'_a & A`i'_b & A`i'_c
}
не то же самое, что
forvalues i = 35/99 {
if inlist(`i', 45, 50, 61, 68, 72, 88) continue
recode A`i'_a A`i'_b A`i'_c (.=0) if A`i'_a==. & A`i'_b==. & A`i'_c==.
}
после того, как я побегу
forvalues i = 1/99 {
if inlist(`i', 45, 50, 56, 57, 58, 61, 68 , 72) continue
drop if A`i'_a==. | A`i'_b==. | A`i'_c==.
}
Я считаю наблюдения, и они не совпадают.
if vl
истинно, если vl
не равно нулю. Это может включать пропущенные значения.
if vl == 1
истинно тогда и только тогда, когда vl
равно 1.
Обратите также внимание, что if v1 & v2 == 1
не понимается как сокращение if v1 == 1 & v2 == 1
.
Обратите также внимание на эту технику:
. numlist "36/93"
. local possible `r(numlist)'
. local exclude 45 50 61 68 72 88
. local wanted : list possible - exclude
. di "`wanted'"
36 37 38 39 40 41 42 43 44 46 47 48 49 51 52 53 54 55 56 57 58 59 60 62 63 64 65 66 67 69 70 71 73 74
75 76 77 78 79 80 81 82 83 84 85 86 87 89 90 91 92 93
Тогда техника будет заключаться в цикле, скажем
foreach w of local wanted {
}
Правильно. См., например. stata.com/support/faqs/data-management/true-and-false или journals.sagepub.com/doi/pdf/10.1177/1536867X1601600117
Спасибо! Также спасибо за технику, но я не понимаю, как она мне поможет, я думал, что forvalues работает только с последовательными числами
Вам нужно переключиться на foreach.
Пожалуйста, смотрите последнее редактирование.
Ах, хорошо, в моих данных много нулей и много пропусков, поэтому две строки
drop if var1 & var2 == 1
и строкаdrop if var1==1 & var2 == 1
в моем случае не совпадают. Таким образом, в любом условии if, если я просто напишу имя переменной без какой-либо спецификации, такой как == 1 или > 2, все, что это означает, это переменная !=0?