Sas 更改当前文件夹

Sas 更改当前文件夹,sas,Sas,我想指定当前文件夹。我可以找到当前文件夹: libname _dummy_ "."; %let folder = %NRBQUOTE(%SYSFUNC(PATHNAME(_DUMMY_))); %put &folder; 并通过双击当前文件夹状态栏手动更改,但我更愿意对其进行编码。这可能吗?像这样: x 'cd <full path>'; SAS识别到已向操作系统发出更改目录命令,并更改其当前工作目录。请注意,X语句的计时与其他全局语句(标题、脚注、选项等)的计时相同。如

我想指定当前文件夹。我可以找到当前文件夹:

libname _dummy_ ".";
%let folder = %NRBQUOTE(%SYSFUNC(PATHNAME(_DUMMY_)));
%put &folder;
并通过双击当前文件夹状态栏手动更改,但我更愿意对其进行编码。这可能吗?

像这样:

x 'cd <full path>';

SAS识别到已向操作系统发出更改目录命令,并更改其当前工作目录。

请注意,
X
语句的计时与其他全局语句(标题、脚注、选项等)的计时相同。如果将其放置在数据步骤中,则将在执行数据步骤之前发出
X
语句

data _null_;
  file '.\HelloWorld.txt';
  put 'Hello, world!';
  x 'cd C:\temp2';
run;
例如,假设您当前的工作目录是
c:\temp
。下面将
HelloWorld.txt
写入
c:\temp2
而不是
c:\temp
。在编译时,SAS运行
X
语句,然后执行数据步骤。请注意,在SAS中,句点(
)是对当前工作目录的引用

data _null_;
  file '.\HelloWorld.txt';
  put 'Hello, world!';
  x 'cd C:\temp2';
run;
要在执行数据步骤后更改目录,您需要使用
呼叫系统
。CALL语句通过在数据步骤后被调用而有条件地执行

data _null_;
  file '.\HelloWorld.txt';
  put 'Hello, world!';
  command = 'cd "C:\temp2"';
  call system(command);
run;

有关Windows系统这类详细信息的更多信息,请参见

我认为X语句的计时与其他全局语句(标题、选项等)的计时相同。X和%SYSCALL或%SYSEXEC的计时之间不应存在差异。你能举个不同的例子吗?我知道,如果在数据步骤中放入一条全局语句(如X),则该全局语句将在数据步骤完成编译之前执行,但这与%syscall和%sysexec是一样的。Windows示例将非常有用。理解X语句是立即执行的。我希望%SYSCALL和%SYSEXEC以及标题和选项都是一样的……我相信你是对的。我不能举出一个表现不同的例子。那么这就是X语句文档所指的“SAS立即执行X语句”吗?我会更新我的答案。下面是一个极其深奥的示例,但它确实说明了
x
语句和使用
%syscall system()
之间的区别。当前工作目录必须是网络上的UNC路径。当我从当前未映射的网络文件(即,它以\\开头)工作时,会发生这种情况。在这种情况下,
%Test()
显示UNC错误
CMD.EXE是以上述路径作为当前目录启动的。不支持UNC路径。默认设置为Windows目录。
出现错误似乎是因为
x
语句立即执行(在分配
temp
之前)。
%macro Test();%让temp=%sysfunc(路径名(工作));数据为空;文件“&temp.\HelloWorld.txt”;放上“你好,世界!”;跑选项xwait;x'cd'&temp.';%sysexec(键入“&temp.\HelloWorld.txt”);%修补;%Test();%宏Test2();%让temp=%sysfunc(路径名(工作));数据为空;文件“&temp.\HelloWorld.txt”;放上“你好,世界!”;跑选项xwait;%让cmd=cd“&temp”;%系统调用系统(cmd);%sysexec(键入“&temp.\HelloWorld.txt”);%修补;%Test2()