Как используется синтаксис в программе?

Я уже несколько раз использовал команду program в Stata.

Сегодня я пытаюсь научиться создавать программу, использующую ввод. Я пытался просмотреть файл справки syntax и страницу 71 эти слайды лекций я нашел в Интернете, но не могу понять, как это сделать.

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

Как видите, все, что я хочу, это создать короткую программу, которая проверяет, существует ли файл в указанной папке (capture confirm file), но я хочу вывести свое собственное диалоговое окно, если есть ошибка (window stopbox note), и если да, то выйти из файла do упорядоченным образом (exit 601).

cap program drop checkfile
program checkfile
syntax varlist, folder(varname) file(varname)
capture confirm file "`folder'/`file'"
    if _rc == 601 {
        window stopbox note `"`file' is not in `folder'"' // creates a dialogue box for the error
        exit 601
    }
end

checkfile folder(C:\Users\User\Documents) file(NIDSw5.dta)

Возвращает ошибку:

операторы переменных-факторов и временных рядов не допускаются
r(101);

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

"`folder'/`file'"

приведет к, например, ""C:\Users\User\Documents"/"NIDSw5.dta"", если ввод сделан с кавычками, поэтому я подумал, что должен использовать метод local(input).

Также обратите внимание, что я буду использовать глобальную переменную ($DataIN) вместо того, чтобы помещать туда строку пути к папке, а имя файла содержит глобальную переменную, добавленную к строке.

Удаление varlist, приводит к ошибке:

неверный синтаксис
r(197);


person ahorn    schedule 23.09.2018    source источник


Ответы (1)


Для меня работает следующее:

program checkfile
syntax, folder(string) file(string)
capture confirm file "`folder'/`file'"
if _rc == 601 {
    window stopbox note `"`file' is not in `folder'"' 
    exit 601
}
end

Затем вам просто нужно ввести:

checkfile, folder(C:\Users\User\Documents) file(NIDSw5.dta)

ИЗМЕНИТЬ:

Вы также можете сделать это без использования опций следующим образом:

program checkfile
capture confirm file "`1'/`2'"
if _rc == 601 {
    window stopbox note `"`2' is not in `1'"'
    exit 601
}
end

checkfile C:\Users\User\Documents NIDSw5.dta
person Community    schedule 23.09.2018