Я хотел бы узнать больше о поведении следующего кода:
clear
set obs 10000
set seed 98034
* I generate three variables
generate double u1 = runiform()
generate double u2=u1
*check
assert u2==u1
***
generate double var1=runiform()
* I generate some ids
generate byte id_=0
forvalues i=1(1)`=10000/100'{
replace id_=`i' if _n>`=(`i'-1)*`=10000/100''
}
*I sum by id_ u1 and u2
bysort id_: egen double u11= total(u1)
bysort id_: egen double u21= total(u2)
*check
assert u11==u21
***
*I drop duplicates
bysort id_: drop if _n>1
*I generate a new variable which should be equal to var1 (I am adding and
*subtracting the same quantities)
generate double var2= var1 - u11 + u21
*(1)
assert var2==var1
В частности, я не могу понять, почему assert
(1) не работает, я сгенерировал каждую переменную, которую я суммировал в так же, поэтому var1
и var2
должны быть идентичны.
Интересно, если я по-разному заказываю сумму, assert
работает:
drop var2
generate double var2= - u11 + u21 + var1
*(2)
assert var2==var1