Идентификаторы, использующие даты

Наверное, это очень простой вопрос, но я не могу в нем разобраться. У меня есть данные, где каждая строка является уникальным результатом для человека. Все люди в наборе данных имеют уникальный идентификатор (Unique ID).

Я хочу создать второй (не уникальный) идентификатор (идентификатор даты) в новом столбце, который является первой датой появления этого человека в данных. Я хотел бы сделать это в Stata, и если это невозможно, я думаю, Excel будет в порядке.

Например, у меня есть:

Unique ID       Date    Outcome
   1          1/1/2000     A
   2          2/11/2003    B
   2          2/12/2003    B
   2          3/6/2004     A
   3          4/4/1997     A
   3          8/11/2011    A
   4          9/16/1995    B
   4          9/17/1995    B
   4          9/18/1995    C
   4          9/19/1995    E
   4          9/20/1995    A
   4          2/17/1996    A
   4          9/16/1996    A
   4          9/17/1996    B
   5          10/16/1995   C
   5          10/17/2005   C
   5          12/31/2008   A

Я хочу:

Unique ID       Date    Outcome           Date ID
   1          1/1/2000     A             1/1/2000
   2          2/11/2003    B             2/11/2003
   2          2/12/2003    B             2/11/2003
   2          3/6/2004     A             2/11/2003
   3          4/4/1997     A             4/4/1997
   3          8/11/2011    A             4/4/1997
   4          9/16/1995    B             9/16/1995
   4          9/17/1995    B             9/16/1995
   4          9/18/1995    C             9/16/1995
   4          9/19/1995    E             9/16/1995
   4          9/20/1995    A             9/16/1995
   4          2/17/1996    A             9/16/1995
   4          9/16/1996    A             9/16/1995
   4          9/17/1996    B             9/16/1995
   5          10/16/1995   C             10/16/1995
   5          10/17/2005   C             10/16/1995
   5          12/31/2008   A             10/16/1995

person CJ12    schedule 01.12.2012    source источник
comment
но в случае, если у двух пользователей одинаковая дата, это не сработает, просто добавьте что-то уникальное.   -  person Garry    schedule 01.12.2012
comment
@ Гарри, использование слова «уникальный» во второй раз является неточным, дубликаты здесь в порядке.   -  person CJ12    schedule 01.12.2012


Ответы (2)


Более прямое однострочное решение:

bysort unique_id (date) : gen date_id = date[1] 

Обратите внимание, что replace — это команда, а не функция. search by, чтобы получить ссылку на учебник по by:.

person Nick Cox    schedule 01.12.2012
comment
См. также FAQ по Stata stata.com/support/faqs/data -management/generating-last-date (актуально, несмотря на название) - person Nick Cox; 02.12.2012

Это может быть не самый эффективный способ, но я понял это:

Сначала я создал счетчик, который подсчитывал, сколько раз каждый человек появлялся в данных.

sort unique_id
by unique_id: gen individual_counter = _n

Затем я использовал этот счетчик, чтобы создать новую переменную, которая была первой датой появления человека в данных или отсутствующим значением «.».

gen date_id = date if individual_counter == 1

Наконец, я использовал функцию замены, чтобы заменить отсутствующие значения сверху (т. е. первый день в списке).

replace date_id = date_id[_n-1] if date_id >= . 
person CJ12    schedule 01.12.2012