clear all cls set more off mata: real scalar f1(real vector x) { real scalar i, n, y, z n = rows(x) y = 0 for (i=1; i<=n; i++) { z = x[i] if (z == 2) { y = y + 1000 } else if (z==1) { y = y + 100 } else { y = y + 10 } } return(y) } real scalar f2(real vector x) { real scalar i, n, y, z n = rows(x) y = 0 for (i=1; i<=n; i++) { z = x[i] if (z == 0) { y = y + 1000 } else if (z==1) { y = y + 100 } else { y = y + 10 } } return(y) } end loc n 1000000 // In 0.25% of cases x==2, in 9.75% of cases x==1, else x==0 mata: x = (runiform(`n', 1) :< 0.05) + (runiform(`n', 1) :< 0.05) forv i=1/20 { timer on 2 mata: (void) f2(x) timer off 2 timer on 1 mata: (void) f1(x) timer off 1 } timer list