Что эквивалентно источнику команды R в Stata?

Я энтузиаст R, борющийся за землю Статы. Я столкнулся со следующей проблемой в своих попытках «перевести» с R на Stata:

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

  1. source("script-1.R")
  2. код бла1
  3. код бла2
  4. source("script-2.R") и т.д.......

Я хотел бы сделать то же самое в Stata и пытался сделать

  1. do "script-1.do"
  2. код бла1
  3. код бла2
  4. do "script-2.do" и т.д.......

Однако я обнаружил, что если я создам макрос в script-1.do, например. local bird 1 Объект/макрос птица недоступен в основном скрипте или доступен для script-2.do. Если я попытаюсь отобразить содержимое bird в основном скрипте, то оно будет просто пустым.

Почему это? Любой совет?


person Community    schedule 24.04.2012    source источник
comment
Могу ли я предложить вам просмотреть ответы, которые были даны на некоторые из ваших предыдущих вопросов, и посмотреть, можно ли отметить какие-либо из них как «приемлемые» ответы. Не забывайте, что вы также можете проголосовать за те, которые оказались полезными: это лучший способ помочь будущим посетителям определить соответствующие ответы на конкретные проблемы.   -  person chl    schedule 12.07.2012


Ответы (2)


Попробуйте использовать include. Вы можете прочитать о различиях между include и do (или run) здесь:

. помогите включить

person Keith    schedule 24.04.2012

Макросы Stata делятся на две группы: local и global. local существуют только в процессе, в котором они были определены (это может быть интерактивный сеанс, do-файл или program). Если вы определили что-то в script-1.do, оно будет существовать только там, и вам придется явно return его видеть в другом месте. (Однако Do-файлы на самом деле не могут этого сделать; вам придется определить program, rclass для возврата значений, а разбиение фрагментов кода на program является хорошей практикой.) Избегайте макросов global, если только это абсолютно и неизбежно необходимо.

R имеет некоторый контроль над областью действия своих объектов, но это далеко не так хорошо по сравнению с контролем Stata над макросами. Переменные и набор данных по-прежнему являются глобальными в Stata, и одновременно у вас не может быть более одного набора данных. Еще одна вещь, которую вы приятно удивите в Stata, — это передача параметров по ссылке, которая экономит много памяти по сравнению с передачей по значению в R. Таким образом, разные пакеты имеют разные сильные стороны, и было бы недальновидно говорить, что один лучше другого.

Сказав это, предложение Кита использовать include было правильным. Я просто попытался объяснить «почему» часть вашего вопроса. Кроме того, если вам нужно обмениваться между программами числом, вы можете сохранить его в явно названном scalar, которое будет видно всем процессам.

person StasK    schedule 12.07.2012