在windows sas 9.4中,我正在尝试使用Using X命令使用mkdir创建一个文件夹。如果路径包含空格,是否可以这样做?
尝试在proc printto之前设置日志和列表。由于空格,下面发布的测试代码似乎失败了。
options mprint compress=yes reuse=yes; %let qtr=%str(2); %let yr=%str(2012); %let logout=%str(program_name_&yr.&qtr._&sysdate.); %let logname=%str(C:\Users\doe_j\folder\sub-folder1\sub folder2\subfolder3 &yr.\q&qtr.\logs\&logout..log); %let logfolder=%str(C:\Users\doe_j\foler\sub-folder1\sub folder2\subfolder3 &yr.\q&qtr.\logs); x "if not exist ""&logfolder.\"" mkdir -p &logfolder.";
答案 0 :(得分:1)
我认为在 logfolder 变量中添加引号应该可以使它工作。在%str()
内,您必须在未配对的引号前面加上%
符号,这样看起来应该是这样的
%let logfolder = %str(%"C:\Users\doe_j\folder\sub-folder1\sub folder2\subfolder3 &yr.\q&qtr.\logs%");
然后你只需要X语句中的一组引号
x "if not exist &logfolder.\ mkdir -p &logfolder.";
答案 1 :(得分:1)
我觉得你很亲密。看起来&logfolder
语句中第二次出现的X
需要被转义的双引号包围,就像第一次出现一样。下面稍微编辑过的代码对我有用:
options noxwait mprint symbolgen compress=yes reuse=yes;
%let qtr=%str(2);
%let yr=%str(2012);
%let logout=%str(program_name_&yr.&qtr._&sysdate.);
%let logfolder=%str(C:\Users\jdoe\Desktop\sub-folder1\sub folder2 space\year &yr.\q&qtr.\logs);
%let logname=%str(&logfolder.\&logout..log);
x "if not exist ""&logfolder."" mkdir ""&logfolder.""";
答案 2 :(得分:1)
宏引用可能会导致问题并阻止它们。您应该只在您知道需要的地方应用宏引用。除非您的目录名称具有不平衡的报价,否则您的程序中不需要宏引用。
%let qtr= 2 ;
%let yr= 2012 ;
%let logout=program_name_&yr.&qtr._&sysdate ;
%let logfolder=C:\Users\jdoe\Desktop\sub-folder1\sub folder2 space\year &yr\q&qtr\logs;
%let logname=&logfolder\&logout..log;
x %sysfunc(quote(if not exist "&logfolder" mkdir "&logfolder"));