Notice: On April 23, 2014, Statalist moved from an email list to a forum, based at statalist.org.

# Re: st: Looping over datetimes for simultaneous variable generation

 From Nick Cox <[email protected]> To "[email protected]" <[email protected]> Subject Re: st: Looping over datetimes for simultaneous variable generation Date Thu, 3 Oct 2013 18:11:22 +0100

```Working backwards: the -quietly- command is not _required_, but
otherwise you will get as many messages as there are changes in
variables.

j is the local macro defined by the -forval- loop. You need to specify
which observation is being processed.
Nick
[email protected]

On 3 October 2013 17:33, Paul Balcombe
<[email protected]> wrote:
> That looks great, thanks a lot.
> For my understanding, what is the role of `j' in this and why do I need it? And why does the code require the quietly command?
> Paul
>
>
> ________________________________________
> From: [email protected] [[email protected]] on behalf of Nick Cox [[email protected]]
> Sent: 03 October 2013 17:02
> To: [email protected]
> Subject: Fwd: st: Looping over datetimes for simultaneous variable generation
>
> Corrected version below. Previous was sent prematurely.
>
> Nick
> [email protected]
>
> qui forval j = 2/`=_N' {
>          if z[`j' - 1] <  x[`j' - 1] & mi(x[`j']) {
>                replace y = y[_n-1] in `j'
>                replace z = z[_n-1] + y  in `j'
>                replace x = x[_n-1] in `j'
>         }
> }
>
> On 3 October 2013 16:47, Paul Balcombe
> <[email protected]> wrote:
>> This doesn't work either because the command must estimate x, y and z at time point n before moving on to point n+1.
>> The code you suggest estimates y at all time points first, before estimating x and z. This doesn't work because y depends upon z(n-1) and x(n-1), as shown in the code.
>> So I need the computation to work out multiple variables (x,y,z) at each time point before moving on to the next time point, which is why I thought I needed a looping command such as forvalues. Does that make sense?
>> Thanks,
>> Paul
>>
>> _______________________________________
>> From: [email protected] [[email protected]] on behalf of Nick Cox [[email protected]]
>> Sent: 03 October 2013 16:34
>> To: [email protected]
>> Subject: Re: st: Looping over datetimes for simultaneous variable generation
>>
>> Fair enough. So -replace- y first.
>>
>> replace y = y[_n-1] if mi(x) & z[_n-1] < x[_n-1]
>> replace z = z[_n-1] + y  if mi(x) & z[_n-1] < x[_n-1]
>> replace x = x[_n-1] if mi(x) & z[_n-1] < x[_n-1]
>>
>> Nick
>> [email protected]
>>
>>
>> On 3 October 2013 14:57, Paul Balcombe
>> <[email protected]> wrote:
>>> But this won't work because when we replace z(n) we need y(n), which is dependent on knowing z(n-1). So, I must use a command that calculates y(n), x(n), z(n) and then y(n+1), x(n+1), z(n+1), rather than calculating all the values for x then y then z.
>>>
>>> Thanks,
>>> Paul
>>>
>>> ________________________________________
>>> From: [email protected] [[email protected]] on behalf of Nick Cox [[email protected]]
>>> Sent: 03 October 2013 12:56
>>> To: [email protected]
>>> Subject: Re: st: Looping over datetimes for simultaneous variable generation
>>>
>>> Might be as simple as
>>>
>>> replace z = z[_n-1] + y  if mi(x) & z[_n-1] < x[_n-1]
>>> replace y = y[_n-1] if mi(x) & z[_n-1] < x[_n-1]
>>> replace x = x[_n-1] if mi(x) & z[_n-1] < x[_n-1]
>>>
>>> Nick
>>> [email protected]
>>>
>>>
>>> On 3 October 2013 11:53, Paul Balcombe
>>> <[email protected]> wrote:
>>>> Thankyou for the response.
>>>>
>>>> I'll try to explain what I want to calculate more clearly:
>>>> I have a dataset with observations of 4 variables every hour for one year. An  example of the data is below. I now want to calculate 5 minutely values in between this hourly data. At each 5 minute interval I want to estimate w, x, y and z with the following rules (not in stata language):
>>>>
>>>> At time t, replace the following variables if mi(x) and if z(t-1) < x(t-1):
>>>> z(t) = z(t-1) + y(t)
>>>> y(t) = y(t-1)
>>>> x(t) = x(t-1)
>>>>
>>>> Where the if statements are false, do not generate new values for the variables.
>>>>
>>>> I need to calculate all variables at each time period, rather than estimate one variable at a time because they are dependent on each other at each time point.
>>>>
>>>> I hope  this is slightly clearer.
>>>> Thanks,
>>>> Paul
>>>>
>>>>
>>>> datetime w x y z
>>>> 19/08/2012 00:00 0 0 0 0
>>>> 19/08/2012 00:05 . . . .
>>>> 19/08/2012 00:10 . . . .
>>>> 19/08/2012 00:15 . . . .
>>>> 19/08/2012 00:20 . . . .
>>>> 19/08/2012 00:25 . . . .
>>>> 19/08/2012 00:30 . . . .
>>>> 19/08/2012 00:35 . . . .
>>>> 19/08/2012 00:40 . . . .
>>>> 19/08/2012 00:45 . . . .
>>>> 19/08/2012 00:50 . . . .
>>>> 19/08/2012 00:55 . . . .
>>>> 19/08/2012 01:00 3.4 0.2448 0.2833333 0.2833333
>>>> 19/08/2012 01:05 . . . .
>>>> 19/08/2012 01:10 . . . .
>>>> 19/08/2012 01:15 . . . .
>>>> 19/08/2012 01:20 . . . .
>>>> 19/08/2012 01:25 . . . .
>>>> 19/08/2012 01:30 . . . .
>>>> 19/08/2012 01:35 . . . .
>>>> 19/08/2012 01:40 . . . .
>>>> 19/08/2012 01:45 . . . .
>>>> 19/08/2012 01:50 . . . .
>>>> 19/08/2012 01:55 . . . .
>>>> 19/08/2012 02:00 0 0 0 0
>>>>
>>>>
>>>>
>>>> ________________________________________
>>>> From: [email protected] [[email protected]] on behalf of Nick Cox [[email protected]]
>>>> Sent: 03 October 2013 10:48
>>>> To: [email protected]
>>>> Subject: Re: st: Looping over datetimes for simultaneous variable generation
>>>>
>>>> There are several problems evident here, and I guess some latent too.
>>>>
>>>> You don't refer to any `datetime' macro within the loop, so at best it
>>>> would do the same things, regardless of the loop.
>>>>
>>>> The syntax ' ' means nothing to Stata. You may wish to evaluate
>>>> numeric constants on the fly, for which the syntax would be something
>>>> like  `=  tc(19aug2012 0:00:00)’
>>>>
>>>> The constant tc(00:05:00) seems unlikely to be what you intend.
>>>>
>>>> For an arbitrary numlist you need -foreach- not -forvalues-.
>>>>
>>>> Those points aside, a better strategy might to explain what you want
>>>> to calculate, with enough about your data and some example data for
>>>> people to follow.
>>>> Nick
>>>> [email protected]
>>>>
>>>>
>>>> On 3 October 2013 10:18, Paul Balcombe
>>>> <[email protected]> wrote:
>>>>> I have a timeseries data set and I want to generate a number of variables that are conditional on each other and their previous values, so I want to create a value for the set of variables at each time period in my data. I thought I should use a forvalues command, but this is new to me and I have so far been unsuccessful: invalid syntax. below is the command I wish to make:
>>>>>
>>>>> forvalues datetime= ‘tc(19aug2012 00:00:00)’ (‘tc(00:05:00)’) ‘tc(18aug2013 23:00:00)’ {
>>>>>                 replace seen=seen[_n-1] if seen==. & seen3[_n-1]<seen[_n-1]
>>>>>                 replace segaspow=segaspow[_n-1] if seen==. & seen3[_n-1]<seen[_n-1]
>>>>>                 replace seen2=seen2[_n-1] if seen==. & seen3[_n-1]<seen[_n-1]
>>>>>                 replace seen3=seen2+seen3[_n-1] if seen==. & seen3[_n-1]<seen[_n-1]
>>>>> }
>>>>>
>>>>> I may be describing the datetime functions incorrectly.
>>>
>>> *
>>> *   For searches and help try:
>>> *   http://www.stata.com/help.cgi?search
>>> *   http://www.stata.com/support/faqs/resources/statalist-faq/
>>> *   http://www.ats.ucla.edu/stat/stata/
>>> *
>>> *   For searches and help try:
>>> *   http://www.stata.com/help.cgi?search
>>> *   http://www.stata.com/support/faqs/resources/statalist-faq/
>>> *   http://www.ats.ucla.edu/stat/stata/
>>
>> *
>> *   For searches and help try:
>> *   http://www.stata.com/help.cgi?search
>> *   http://www.stata.com/support/faqs/resources/statalist-faq/
>> *   http://www.ats.ucla.edu/stat/stata/
>> *
>> *   For searches and help try:
>> *   http://www.stata.com/help.cgi?search
>> *   http://www.stata.com/support/faqs/resources/statalist-faq/
>> *   http://www.ats.ucla.edu/stat/stata/
>
> *
> *   For searches and help try:
> *   http://www.stata.com/help.cgi?search
> *   http://www.stata.com/support/faqs/resources/statalist-faq/
> *   http://www.ats.ucla.edu/stat/stata/
> *
> *   For searches and help try:
> *   http://www.stata.com/help.cgi?search
> *   http://www.stata.com/support/faqs/resources/statalist-faq/
> *   http://www.ats.ucla.edu/stat/stata/

*
*   For searches and help try:
*   http://www.stata.com/help.cgi?search
*   http://www.stata.com/support/faqs/resources/statalist-faq/
*   http://www.ats.ucla.edu/stat/stata/
```

• References: