On Wed, 30 Nov 2011, Sven Schreiber wrote: > On 11/30/2011 10:55 PM, Henrique Andrade wrote: >> Dear Hansl experts, >> >> I would like to write a Hansl code but unfortunately I'm out of >> creativity :( >> I have a binary series with blocks of 0 and 1. Something like >> >> X=(0,0,0,1,1,1,1,1,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1). >> >> Here are the steps I need do follow: >> >> (1) Find the number of 1-blocks; >> (2) Calculate the average number of observations inside these blocks. >> >> In my hypothetical example, the X series, I have two blocks, and these >> blocks have an average of 8 observations (five observations in the first >> block and eleven observations in the second block). >> > > Just a quick thought: you could take the (serial/first) difference of > your series and count the occurrences of -1, which indicates how many > times you have a 01 pattern. And each 1 in the difference indicates the > position of a 10 pattern (or vice versa, depending on whether you take > left-to-right or right-to-left differences). The position indices help > you determine how many ones you have in between, i.e. in each block. > > But your problem in general does look like unpleasant details to code.
Building on Sven's idea: call your binary series y. Then, <hansl> series chg = diff(y) chg[1] = (y[1] == 1) scalar n_blocks = sum(chg==1) scalar avg_len = sum(y) / n_blocks </hansl> I think this ought to work. Riccardo (Jack) Lucchetti Dipartimento di Economia Università Politecnica delle Marche r.lucchetti(a)univpm.it http://www.econ.univpm.it/lucchetti