Как вернуть каретку длинный локальный список и как определить список только один раз

Мой первый вопрос прост, но нигде не могу найти ответа, и это сводит меня с ума:

  • При определении локального списка в Stata, как мне сделать возврат каретки, если список очень длинный?

Обычный /// не работает внутри двойных кавычек.

Например, это не работает:

local reglist "lcostcrp lacres lrain ltmax ///
ltmin lrainsq lpkgmaiz lwage2 hyb gend leducavg ///
lageavg ldextn lfertskm ldtmroad"

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

Мой второй вопрос - более серьезная проблема:

  • Определив локальный reglist, как я могу заставить Stata запомнить его для многократного последующего использования (то есть не только одного)?

Например:

local reglist lcostcrp lacres lrain ltmax ///
ltmin lrainsq ///
lpkgmaiz lwage2 ///
hyb gend leducavg lageavg ldextn lfertskm ldtmroad

reg lrevcrp `reglist' if lrevcrp~=.,r
mat brev=e(b)
mat lis brev

/*Here I have to define the local list again.  How do I get Stata to remember 
it from the first time ??? */

local reglist lcostcrp lacres lrain ltmax ///
ltmin lrainsq ///
lpkgmaiz lwage2 ///
hyb gend leducavg lageavg ldextn lfertskm ldtmroad

quietly tabstat `reglist' if lrevcrp~=., save
mat Xrev=r(StatTotal),1
mat lis Xrev

Здесь я определяю локальный reglist, затем запускаю regression, используя этот список, и делаю некоторые другие вещи.

Затем, когда я хочу получить значения всех переменных в локальном reglist, Stata больше не помнит его и должен определить его снова. Это противоречит всей цели определения списка.

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


person ben    schedule 24.01.2013    source источник


Ответы (1)


Лучший ответ на ваш первый вопрос заключается в том, что если вы вводите длинное определение local в команде, то (1) вам не нужно вводить возврат каретки, вы просто продолжаете печатать, и Stata будет циклически повторяться и/или ( 2) есть лучший способ приблизиться к определению local. Обычно я не стал бы вводить длинные локальные определения в интерактивном режиме, потому что это слишком утомительно и чревато ошибками.

Кавычки не обязательны для таких примеров, как ваш, они необходимы только для обозначения строк с открывающими или закрывающими пробелами.

Ваш второй вопрос загадочен. Stata не забудет определения локальных макросов в той же программе (в широком смысле), если вы явно не очистите этот макрос, т.е. переопределите его в пустую строку. Здесь программа (в широком смысле) означает program (в узком смысле), do-file, содержимое редактора do-file или основной интерактивный сеанс. Вы не объяснили, почему, по вашему мнению, это происходит. Я подозреваю, что вы делаете что-то еще, например, пишете часть своего кода в редакторе do-file и запускаете его в сочетании с написанием команд в интерактивном режиме через командное окно. Это приводит к указанной трудности: local макросы local относятся к программе, в которой они определены, поэтому (в том же примере) макросы, определенные в редакторе do-file, являются локальными для этой среды, но невидимы для основного интерактивного сеанса, и наоборот. наоборот

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

person Nick Cox    schedule 24.01.2013
comment
Пример в моем посте — это мой пример того, как Стата забыл список. Если я не определяю список снова, я получаю сообщение об ошибке в командной строке tabstat о том, что требуется varlist. - person ben; 24.01.2013
comment
Извините, но ваш код не показывает, что вам нужно переопределить local; это просто показывает, что вы это делаете. Кроме того, мы не можем воспроизвести этот код без определения поддельного набора данных. Если то, что вы говорите, правда, вы можете показать нам, используя набор данных, доступный для всех, например. автоматический набор данных, который вы можете прочитать с помощью sysuse auto. - person Nick Cox; 24.01.2013
comment
Проверка того, что local больше не существует, заключается в том, что ничего не отображается, когда вы пытаетесь его показать. Кроме того, если то, что вы говорите, верно, многие программы Stata потерпят неудачу из-за отсутствия переопределения, но это не так. Вы не обращаетесь к моему мнению о разных программах; вы не можете использовать /// в интерактивном режиме, вы используете do-file или редактор do-file для этих операторов? - person Nick Cox; 24.01.2013
comment
Ах, мой плохой! Я работал с файлом do, но проблема заключалась в том, что я выбирал и выполнял первую часть кода, затем пропускал часть, которую не хотел выполнять прямо сейчас, и выбирал и выполнял последующую часть. Когда я выбираю все это и запускаю, локальный список запоминается. Простая ошибка с моей стороны. - person ben; 25.01.2013
comment
Это главная проблема. Если вы копируете и вставляете в редактор do-file, запускаете код, а затем делаете то же самое, два сегмента независимы, и каждый не может знать об local определениях в другом. Неопределенное практическое правило заключается в том, что определение должно быть выдано ранее в том же окне, а также быть видимым при выполнении кода. Если вместо этого вы используете globals, этого не произойдет, но это часто осуждается как плохой стиль. - person Nick Cox; 25.01.2013