Bookmark and Share

Notice: On March 31, it was announced that Statalist is moving from an email list to a forum. The old list will shut down at the end of May, and its replacement, statalist.org is already up and running.


[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: st: Loop year variable


From   Nick Cox <njcoxstata@gmail.com>
To   statalist@hsphsun2.harvard.edu
Subject   Re: st: Loop year variable
Date   Sun, 21 Oct 2012 23:23:21 +0100

See for technique here

FAQ     . . . . . . . . . . . . . . . . . . . . . . . Replacing missing values
        . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  N. J. Cox
        2/03    How can I replace missing values with previous or
                following nonmissing values?
                http://www.stata.com/support/faqs/data/missing.html

bysort iso_o iso_d (year) : gen datewon = year if !missing(FT_A, FT_B)
& FT_A > FT_B
by iso_o iso_d : replace datewon = datewon[_n-1] if missing(datewon)
gen yrs_won = date - datewon

Nick

On Sun, Oct 21, 2012 at 10:37 PM, emanuele mazzini
<madsoenistata@gmail.com> wrote:
> Ok, let's ignore this additional issue for the moment. I can be
> clearer I guess with the following example:
>
>  +---------------------------------------------------------------------+
>      | year   iso_o   iso_d   team_A       team_B   FT_A   FT_B   date_won |
>      |---------------------------------------------------------------------|
>   1. | 1982     ITA     DEU    Italy   Germany FR      3      1       1982 |
>   2. | 1983     ITA     DEU                            .      .          . |
>   3. | 1984     ITA     DEU                            .      .          . |
>   4. | 1985     ITA     DEU                            .      .          . |
>   5. | 1986     ITA     DEU                            .      .          . |
>      |---------------------------------------------------------------------|
>   6. | 1987     ITA     DEU                            .      .          . |
>   7. | 1988     ITA     DEU                            .      .          . |
>   8. | 1989     ITA     DEU                            .      .          . |
>   9. | 1990     ITA     DEU                            .      .          . |
>  10. | 1991     ITA     DEU                            .      .          . |
>      |---------------------------------------------------------------------|
>  11. | 1992     ITA     DEU                            .      .          . |
>  12. | 1993     ITA     DEU                            .      .          . |
>  13. | 1994     ITA     DEU                            .      .          . |
>  14. | 1995     ITA     DEU                            .      .          . |
>      +---------------------------------------------------------------------+
>
> As you can see, the variable date_won is =1982 only for the year in
> which the match was played. Now, I would like to generate a new
> variable that would tell me how many years have gone by since Italy's
> last won (e.g, =0 for 1982, =1 for 1983, =2 for 1984, etc.).
> As I said, I tried with: gen yrs_won=year-date_won but this is the result:
>
>   +---------+
>      | yrs_won |
>      |---------|
>   1. |       0 |
>   2. |       . |
>   3. |       . |
>   4. |       . |
>   5. |       . |
>      |---------|
>   6. |       . |
>   7. |       . |
>   8. |       . |
>   9. |       . |
>  10. |       . |
>      |---------|
>  11. |       . |
>  12. |       . |
>  13. |       . |
>  14. |       . |
>      +---------+
>
> As you can see, such command doesn't produce the expected result. That
> explains why I was looking for a way to expand the value of date_won
> for all cells. I thought that was the reason for the command not to
> work. Do you have any suggestion for overcoming my problem?
>
> Thank you in advance,
>
> Regards,
>
> E.M.
>
>
>
>
> 2012/10/21 Nick Cox <njcoxstata@gmail.com>:
>> I gathered from your original posting that you had yearly data. I
>> understand that matches may be more frequent than yearly, but I can't
>> advise further without seeing what your data look like as the trade
>> data and match data are not obviously compatible.
>>
>> Nick
>>
>> On Sun, Oct 21, 2012 at 1:00 PM, emanuele mazzini
>> <madsoenistata@gmail.com> wrote:
>>> Dear Mr Cox,
>>>
>>> thank you for your reply. The point, however, is that I cannot declare
>>> my dataset to be time-series (how would like but I cannot) due to the
>>> fact that some matches may take place once, twice or even more times
>>> in the same year. That is why I was looking form a manual command. I
>>> may better handle this first? And how can I do that in your opinion?


2012/10/21 Nick Cox <njcoxstata@gmail.com>:
>>>> This should yield to a treatment in terms of spells in the sense of
>>>> -tsspell- (SSC) and of
>>>>
>>>> SJ-7-2  dm0029  . . . . . . . . . . . . . . Speaking Stata: Identifying spells
>>>>         . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .  N. J. Cox
>>>>         Q2/07   SJ 7(2):249--265                                 (no commands)
>>>>         shows how to handle spells with complete control over
>>>>         spell specification
>>>>
>>>> Look at -tsspell- first; it is self-contained. That is, your panels
>>>> are defined by country pairs (dyads) and the start of a spell is
>>>> defined by a match taking place (or a particular result; I don't
>>>> follow exactly what you want, e.g what about draws?). Then a variable
>>>> defined by -tsspell- gives you sequence in spell. You may need to
>>>> subtract 1.
>>>>
>>>> I don't see that loops are needed.
>>>>
>>>> Nick
>>>>
>>>> On Sun, Oct 21, 2012 at 12:07 PM, emanuele mazzini
>>>> <madsoenistata@gmail.com> wrote:
>>>>
>>>>> I am not a new Stata user, but I have to admit I still encounter some
>>>>> problems with writing loops. A loop may not be the solution to the
>>>>> issue I am going to describe, but I thought it is tough.
>>>>>
>>>>> I do have a dataset where I have country-pair trade observations for
>>>>> years 1950-2006 as well as another information, which is football
>>>>> match result for some dyads. I therefore need to generate a variable
>>>>> that indicates how many years are passed since the last won/lost of a
>>>>> country versus another. Suppose FT_A and FT_B are the final results
>>>>> for team A and B. I thought to generate a variable as follows:
>>>>>
>>>>> gen int date_won=year if FT_A>FT_B | FT_A<FT_B
>>>>>
>>>>> in order to get a variable that is = year for every observation I have
>>>>> information about, which reports the year of the won/loss. I then
>>>>> thought to generate another variable (let's say yrs_won) to tell me
>>>>> how many years have gone by as follows:
>>>>>
>>>>> gen int yrs_won=year-date_won
>>>>>
>>>>> Unfortunately, I do not get what I want: the only value yrs_won
>>>>> assumes is 0, but for all years from 1983 until 2006 I would like it
>>>>> to be 1, 2,3 and so on.
>>>>>
>>>>> At the beginning I didn't realize the problem, now it may be occur due
>>>>> to the fact that date_won = year only for the year in which the match
>>>>> was played. I guess I need to do something such as writing a loop to
>>>>> let it spread over all cells of such variable, but I don't really know
>>>>> how to make it. Does anyone of you has any suggestion?
*
*   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/


© Copyright 1996–2014 StataCorp LP   |   Terms of use   |   Privacy   |   Contact us   |   Site index