0

我已经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);

4

1 回答 1

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
于 2018-09-23T13:31:21.290 回答