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