我希望能够在SAS中创建Windows目录结构,最好使用一种允许我指定UNC命名约定的方法,例如:
\\computername\downloads\x\y\z
我在网上看到很多关于SAS的例子,使用通过%sysexec()
或者x
命令调用的DOS mkdir
命令。这个mkdir命令的好处是,如果它们不存在,它将创建任何中间文件夹。我成功地从命令提示符下测试了下面的命令,并得到了预期的行为(由于我的路径名中没有空格,因此引号似乎并不重要):
mkdir \\computername\downloads\x\y\z
mkdir d:\y
mkdir d:\y\y
mkdir "d:\z"
mkdir "d:\z\z"
mkdir \\computername\downloads\z\z\z
mkdir "\\computername\downloads\z\z\z"
以下内容在 SAS 中可以正常运行:
x mkdir d:\x;
x 'mkdir d:\y';
x 'mkdir "d:\z"';
x mkdir \\computername\downloads\x;
x 'mkdir \\computername\downloads\y';
但是当从SAS运行时,它们无法正常工作。例如:
x mkdir d:\x\x;
x 'mkdir d:\y\y';
x 'mkdir "d:\z\z"';
x mkdir \\computername\downloads\x\y\z ;
x 'mkdir "\\computername\downloads\z"';
** OR **;
%sysexec mkdir "\\computername\downloads\x\y\z ";
** OR **;
filename mkdir pipe "mkdir \\computername\downloads\x\y\z";
data _null_;
input mkdir;
put infile;
run;
它不起作用。不仅如此,窗口会立即关闭,即使我已经指定了options xwait
,因此没有机会查看任何错误消息。我尝试了使用UNC路径和驱动器字母路径的所有方法,例如:D:\downloads\x\y\z
。
如果我查看操作系统返回的错误消息:
%put %sysfunc(sysrc()) %sysfunc(sysmsg());
我理解如下:
我得到以下结果:
-20006 WARNING: Physical file does not exist, d:\downloads\x\x\x.
查看mkdir
命令的文档,似乎只有在启用“命令扩展”时才支持创建中间文件夹。这可以通过将/E:ON
添加到cmd.exe
来实现。我已尝试更改我的代码以使用:
cmd.exe /c /E:ON mkdir "\\computername\downloads\x\y\z"
仍然没有运气!
有人能告诉我为什么除了我之外,互联网上的其他人似乎都能够在SAS内部使其工作吗?再次强调,它可以从DOS提示符中正常工作-只是无法从SAS内部工作。
我希望得到一个明确解决此问题的答案(我知道还有其他使用多个步骤或dcreate()
的解决方案)。
我正在运行WinXP 32位,SAS 9.3 TS1M2。谢谢。