假设我hello.txt在目录中调用了一个文件c:\test\,那么以下运行在Stata中没有问题:
local folder "c:\test"
confirm file "`folder'\hello.txt"
Run Code Online (Sandbox Code Playgroud)
但以下不会
local folder "c:\test"
local file "hello.txt"
confirm file "`folder'\`file'"
Run Code Online (Sandbox Code Playgroud)
如何将多个本地组合成一个c:\test\hello.txt可以在confirm file命令中使用的路径?
提前致谢.
问题是,\它既可以作为转义字符,也可以作为Windows文件路径的一部分.
当您在包含本地宏的Stata中键入内容时,Stata的第一个操作是评估该宏,即查看其内容并用该内容替换宏.有时(很少,但可能发生)你想要阻止它.这就是逃避角色的用途.
所以Stata在你的第二个例子中看到的是
c:\test`file'
Run Code Online (Sandbox Code Playgroud)
这不是一个有效的路径.
最简单的解决方案是使用a /而不是a \,就Stata而言,这将导致一个有效的路径,并且不会充当转义字符.
欲了解更多信息,请参阅:Nicholas J. Cox(2008)Stata提示65:谨防背刺的反斜杠.Stata Journal,8(3):446--447.
http://www.stata-journal.com/article.html?article=pr0042