2015-09-11 2 views
0

Я использую Stata уже несколько лет вместе с другими языками, такими как R. Stata замечательный, но меня раздражает одно: поведение генерации/замены и особенно ошибка «... уже определена».Stata: сгенерировать/заменить альтернативы?

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

capture drop foo 
generate foo = ... 

Хотя она занимает только одну строку в другие языки, такие как R.

Так есть ли другой способ определить переменные, которые объединяют «генерировать» и «заменять» в одной команде?

+1

С моей точки зрения, Stata защищает целостность ваших данных. Дополнительная проверка - небольшая цена для оплаты. –

+0

Это не проблема для меня и, возможно, для других, потому что я пишу свой код в do-файлах, которые я запускаю сверху, начиная с очистки и перезагрузки данных. Я вижу проблему при отладке, выбирая группу строк и запуская, редактируя и повторяя, пока они не верны, а затем перейдем к следующей группе строк. Но поскольку группа строк запускается из временного файла do-file, локальные макросы не сохраняются в конце теста для использования следующей группой отправленных строк. Это означает, что мне редко бывает полезно отправлять код по частям. –

+0

Да, я согласен с тем, что Stata предназначен для запуска целого файла do-file, а не для файлов do-файлов, а локальный макрос - хороший пример, а также команда «set off off». Наверное, я должен просто приспособить свое поведение. Проблема в том, что некоторая команда занимает очень много времени для выполнения, поэтому отладка кода после таких команд не удобна. – Victor

ответ

0

Я не знаю, как это сделать напрямую. Кроме того, как следует из комментария Роберто, есть причины, по которым просто выдача команды generate не будет перезаписывать (см.: replace) содержимое переменной.

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

Следует отметить, что Stata не одинок в этом отношении. Например, SQL Server требует, чтобы пользователь удалял существующую таблицу перед созданием таблицы с тем же именем (в той же базе данных), не допускает множественные столбцы с тем же именем в таблице и т. Д., И все это по уважительной причине.

Однако, если вы действительно настроены на то, что можете сделать однострочный в Stata, чтобы делать то, что вы хотите, вы могли бы написать очень простую программу. Ниже следует, чтобы вы начали:

program mkvar 
version 13 

    syntax anything=exp [if] [in] 

    capture confirm variable `anything' 

    if !_rc { 
     drop `anything' 
     } 

    generate `anything' `exp' `if' `in' 

end 

Вы тогда, естественно, сохранить программу mkvar.ado в директории, Stata бы найти (то есть C:. \ Лишних слов \ персональный \ на Windows Если вы не уверены, тип sysdir), и вызвать его с помощью:

mkvar newvar=expression [if] [in] 

Теперь, я не проверял выше код так, вы, возможно, придется сделать немного де-подслушивание, но он работал отлично в примерах I» попробовал.

В заключительной записке я бы посоветовал вам проявлять осторожность при этом - конечно, вы захотите быть бдительными в отношении изменения ваших данных, сохраните копию своих необработанных данных, в то время как файл do будет обрабатывать данные в память и т. д.

+0

Спасибо за ваш ответ.Я не думал о написании программы, спасибо за объяснения. Конечно, сохранение копии исходного набора данных всегда является хорошей практикой. – Victor