I need to use _pctile inside another ado that only accepts eclass programs. My original solution was to create a wrapper that takes _pctile rclass results and put them into a matrix. Though that works, in the context of a lot of data and loops, total execution time is over 30h. And I believe this is largely due to the inefficiency of my solution.
With the mock case below, I can see that the wrapper has increased five fold the execution time of the operation. Could any one suggest a better way to handle this?
Any help would be much appreciated!
HTML Code:
cap program drop eclass_pctile program define eclass_pctile, eclass * This is a wrapper to make the rclass program _pctile into an eclass * Usual outputs are r(r1)... r(rN) -> matrix b = (r(r1), ..., r(rN)) _pctile `0' * Interlude to name the columns nicely (varname_p1 ... varname_pN) gettoken varname options : 0, parse(" ,") * Create strings with all elements and all column names local elements "`r(r1)'" local colnames "`varname'_r1" local i = 2 while !missing("`r(r`i')'") { local elements "`elements', `r(r`i')'" local colnames "`colnames' `varname'_r`i'" local ++ i } * Put the string of elements in a 1 line matrix with N columns matrix b = (`elements') * Name the matrix columns matrix colnames b = `colnames' ereturn post b end * Test execution time with a mock (my use case has many observations, thus expand) clear sysuse auto expand 1000 set rmsg on * For a small number of results, the execution time is quite similar _pctile price, n(10) eclass_pctile price, n(10) * For a large number of results, the modified version takes 5x longer _pctile price, n(500) eclass_pctile price, n(500)
0 Response to Optimization time when transposing rclass into eclass
Post a Comment