2013-09-30 4 views
1

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

ID   Data 
1   X 
1   Y 
2   A 
2   B 
2   Z 
3   X 

Я хочу, чтобы цикл, который обозначает экземпляр идентификатора, который я ищу. Это первый раз, второй раз и т. Д.? Я хочу, чтобы это было как строка в форме _#, поэтому мне, насколько мне известно, нужно пройти за рамки простой функции _n в Stata. Если кто-то знает способ делать то, что я хочу, без цикла, дайте мне знать, но мне все равно понравится ответ.

Я следующий цикл в Stata

by ID: gen count_one = _n 
gen count_two = "" 
quietly forval j = 1/3 { 
replace count_two = "_`j'" if count_one == `j' 
} 

Выход теперь выглядит следующим образом:

ID   Data   count_one   count_two 
1   X    1     _1 
1   Y    2     _2 
2   A    1     _1 
2   B    2     _2 
2   Z    3     _3 
3   X    1     _1 

Вопрос заключается в том, как я могу заменить 16 выше, чтобы сказать Stata взять максимум столбца count_one, потому что мне нужно запустить эту еженедельно, и этот макс изменится, и я хочу уменьшить ошибки.

ответ

1

Некоторые части вашего вопроса не ясно («... заменить 16 выше, чтобы сказать Stata ...»), но:

Почему вы не просто использовать _n с tostring?

gsort +ID +data 
bys ID: g count_one=_n 
tostring count_one, gen(count_two) 
replace count_two="_"+count_two 

Тогда для генерации макс (при ответе на вопрос частичный в конце есть) - хотя примечание это значение будет повторяться через экземпляров каждого значения ID:

bys ID: egen maxcount1=max(count_one) 

или более элегантно:

bys ID: g maxcount2=_N 
+1

Последняя команда не работает. Должно быть «gen», а не 'egen'. 'tostring' менее прямо, чем' string() '. –

+0

Спасибо, что поймали это. Теперь исправлено. – SOConnell

2

это трудно понять, почему вы хотите, но это одна линия, хотите ли вы цифровой или строка:

bysort ID : gen nummax = _N 

bysort ID : gen strmax = "_" + string(_N) 

Обратите внимание, что порядок сортировки в пределах ID не имеет отношения к количеству наблюдений для каждого.

+0

Чтобы соответствовать примеру '_N', необходимо изменить на' _n'. Пожалуйста, измените, и я соглашусь. FYI: Это необходимо, когда данные объединены, а их имена переменных добавляются со значением строки (_n) для отслеживания. – CJ12

+0

Ваш вопрос заканчивается запросом _maximum_, и это то, что дает мой ответ. Я не вижу причин менять свой ответ, пока это вопрос. –

+0

Для будущих читателей, пожалуйста, также исправьте таинственную ссылку на '16', как указано @SOConnell. –

Смежные вопросы