2016-11-08 13 views
0

У меня есть список идентификаторов лиц и типы лекарств, которые они получили в определенные даты.Определите уникальные уровни категориальной переменной

Я хотел бы создать переменную count, посредством которой я могу дать индикатор 1 первому препарату, который возникает, 2 - второму уникальному препарату и 3 - третьему уникальному препарату. Когда первый препарат появляется после второго и третьего, я хочу, чтобы он все еще имел индикатор 1. Аналогично для уникального лекарственного средства 2 он должен поддерживать значение 2 во всей истории лечения всего человека, а также для лекарственного средства 3.

 +-------------------------------------+ 
    | p_id  date  agent_~e count | 
    |-------------------------------------| 
38. | 1001 13dec2001 thiazide  1| 
39. | 1001 12apr2002 thiazide  1| 
40. | 1001 15jul2002 thiazide  1| 
41. | 1001 28aug2002  arb  2| 
42. | 1001 26sep2002  CCB  3| 
    |-------------------------------------| 
43. | 1001 26sep2002  arb  2| 
44. | 1001 10oct2002  CCB  3| 
45. | 1001 10oct2002 thiazide  1| 
46. | 1001 10oct2002  arb  2| 
47. | 1001 10dec2002  CCB  3| 
    |-------------------------------------| 
48. | 1001 10dec2002  arb  2| 
    +-------------------------------------+ 

поскольку каждый человек имеет различный набор лекарств, я думаю, мне нужно довольно общее решение, в отличие от чего-то, как

gen count = 1 if agent_type == "thiazide". 

Например, человек два ниже, и они имеют очень разные истории наркотиков к person один выше.

  +-------------------------------+ 
     | p_id date  agent_t~e | 
     |-------------------------------| 
    207. | 2001 08jul1999 ace_inhib | 
    208. | 2001 02aug1999 ace_inhib | 
    209. | 2001 25aug1999 ace_inhib | 
    210. | 2001 22oct1999 ace_inhib | 
    211. | 2001 18nov1999   CCB | 
     |-------------------------------| 
    212. | 2001 18nov1999 ace_inhib | 
    213. | 2001 14dec1999   CCB | 
    214. | 2001 12jan2000   CCB | 
    215. | 2001 03feb2000   CCB | 
    216. | 2001 03feb2000   arb | 
     |-------------------------------| 
    217. | 2001 02mar2000   CCB | 
     +-------------------------------+ 

ответ

1

«Уникальный» является распространенным неправильным здесь; строго говоря, это означает только один раз, что совсем не то, что вы имеете в виду. «Отличный» - гораздо лучшее слово: для обсуждения в контексте Stata см. here.

Просьба узнать о dataex от SSC, чтобы иметь возможность показывать примеры данных, которые можно скопировать и вставить непосредственно. Для вас было необходимо, чтобы какая-то техника была простой в использовании.

Ваша проблема уже в Стате FAQ found here. Это хорошая идея, чтобы просмотреть часто задаваемые вопросы перед публикацией.

* Example generated by -dataex-. To install: ssc install dataex 
clear 
input float p_id str8 agent_type float(wanted date) 
1001 "thiazide" 1 15322 
1001 "thiazide" 1 15442 
1001 "thiazide" 1 15536 
1001 "arb"  2 15580 
1001 "CCB"  3 15609 
1001 "arb"  2 15609 
1001 "CCB"  3 15623 
1001 "thiazide" 1 15623 
1001 "arb"  2 15623 
1001 "CCB"  3 15684 
1001 "arb"  2 15684 
2001 "ace_inhi" 1 14433 
2001 "ace_inhi" 1 14458 
2001 "ace_inhi" 1 14481 
2001 "ace_inhi" 1 14539 
2001 "CCB"  2 14566 
2001 "ace_inhi" 1 14566 
2001 "CCB"  2 14592 
2001 "CCB"  2 14621 
2001 "CCB"  2 14643 
2001 "arb"  3 14643 
2001 "CCB"  2 14671 
end 
format date %td 

bysort p_id agent_type (date) : gen firstdate = date[1] 
egen group = group(p_id firstdate agent_type) 
bysort p_id (group date agent_type): gen count = sum(group != group[_n-1]) 
assert count == wanted 

Обратите внимание, что код заботится о возможности того, что два или более препаратов первыми используются в тот же день и тот же человек.

+0

Большое вам спасибо за это и за указатели на вопрос. Я действительно прочитал FAQ, прежде чем я разместил вопрос, но не смог применить его успешно. Теперь, когда вы сказали, что это возможное решение, я вернусь к нему, чтобы лучше понять. Повторите решение, которое вы разместили выше, не возражаете ли вы объяснить, что это означает, когда «дата» находится в скобках в первой строке кода? – user2363642

+1

См. 'Help by' для синтаксиса' by'. –

+0

См. 'Help input' для синтаксиса' input'. –