Как синтаксис используется в программе? - PullRequest
0 голосов
/ 23 сентября 2018

Я уже несколько раз использовал команду 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);

1 Ответ

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

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

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
...