Может ли пользователь решить, выполнять ли цикл кода или запускать его только один раз? - PullRequest
0 голосов
/ 17 мая 2018

В моем файле .do я задаю пользователю несколько вопросов о том, какие регрессии они хотят запустить, используя display _request(macroname).Затем я интерпретирую их ответ (в большинстве случаев это либо yes, либо no) и определяю другой макрос, который появляется в коде регрессии.Я делаю это, так как есть много разных опций, какую регрессию запускать, и это позволяет легко выбрать, какую из них запустить.

Теперь я хочу автоматизировать процесс, который перебирает все различные опции, и я подумал, что было бы неплохо добавить дополнительный вопрос в начале.Будет задан вопрос, не хочет ли пользователь также отвечать на вопросы, а не запускать 64 комбинации (вывод которых будет сохранен в различных соответствующим образом названных различных документах Word).

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

Могу ли я сохранить кодв макрос и затем укажите, когда должен выполняться код?

Редактировать : Мое лучшее решение - запустить отдельный файл .do с помощью команды do.Если мне нужно делать это чаще, можно ли это сделать без запуска отдельного файла .do?

********************** Regressions ***********************

* If you haven't yet installed estout on your machine, you need to do that.
 ssc install estout

pause Note that the regressions will be put in $DataOUT


capture window stopbox rusure "DO YOU WANT TO RUN EVERY POSSIBLE REGRESSION?" "This might take about 10 minutes."
if _rc == 0 {
    global cheat_yn = "yes"
}
if _rc == 1 {
    global cheat_yn = "no"
}


if "$cheat_yn" != "yes" {

/* Great! You're now at the end of the .do file! I'm going to ask you to type
in answers to some questions, to determine what variables you want to work
with. Just type in your answer in the command field, and press enter. */

* 1. Please enter a dependent variable out of searches, encouraged, employed or participates
display _request(dep)
* 2. Grant X female recipient interaction? Enter yes or no.
display _request(gXf_yn)
* 3. Grant X matric interaction? Enter yes or no.
display _request(gXmat)
* 4. Define grant independent variable to include 3 or 5 grant types? Enter 3 or 5.
display _request(n_3_5)
* 5. Dummy for grant or income? Enter dummy or income. (Note that the sample with dummy includes households with no grant income whereas the sample with the income variable only includes households with a positive grant income.)
display _request(grantd)
* 6. Separate out grant into different types or not? Enter yes or no.
display _request(separate)

do "$DataIN\running_regressions.do"

}


if "$cheat_yn" == "yes" {
pause off
foreach dependent in employed participates encouraged searches {
global dep = "`dependent'"
foreach f in no yes {
global gXf_yn = "`f'"
foreach d in income dummy {
global grantd = "`d'"
foreach s in no yes {
global separate = "`s'"
foreach n in 3 5 {
global n_3_5 = "`n'"
foreach m in yes no {
global gXmat = "`m'"
if ( "`dependent'" != "searches" & "`dependent'" != "encouraged" ) | "`f'" != "yes" | "`d'" != "dummy" | "`s'" != "yes" {
* The previous line removes a few regressions that don't run properly

do "$DataIN\running_regressions.do"

}
}
}
}
}
}
}

}

1 Ответ

0 голосов
/ 20 сентября 2018

Существует трюк с использованием макроса для закомментирования строк сценария: (Не так элегантно, как при написании программы ...)

if answer = "yes" local star = ""
else local star = "*"

, а затем сначала ставьте звездочку в строке сценария: Если«звезда» пуста, строка выполняется, но если «звезда» содержит звездочку, строка рассматривается как комментарий:

`star' display "hi, there"

будет выполняться только в том случае, если «ответ» был «да».

Если вы можете построить свой скрипт так, чтобы можно было закомментировать начальные и конечные строки цикла и при этом иметь команды внутри цикла, это может вам помочь.

...