程序中如何使用语法?

时间:2018-09-23 13:24:16

标签: stata stata-macros

我已经在Stata中使用program命令很多次了。

今天,我正在尝试教自己如何创建使用输入的程序。我曾尝试查看syntax帮助文件和these lecture slides I found on the internet的第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 :(得分: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