sas make文件夹名称中带有助记符的目录

时间:2019-02-08 22:45:37

标签: sas

我正在尝试创建一个名称中带有字符“&”的文件夹

我尝试了%superq函数,该函数似乎可以正确解释宏变量

x "cd     c:\Users\avibe_000\Dropbox\htdocs\Landa2018\LDPdepartments\";                                                                 
data _null_;                                                                                                                            
call symput('mv1','Smith&Jones');                                                                                                       
 run;                                                                                                                                   
%let testmv1=%superq(mv1);                                                                                                              
%put  &testmv1  ;                                                                                                                       
x "mkdir &testmv1";  

代码可以正常工作,但会按预期创建文件夹“ Smith”,而不是“ Smith&Jones”

4 个答案:

答案 0 :(得分:1)

DCREATE函数将创建一个子文件夹。在宏中,使用nrstr将未解析的值传递给函数。 %SUPERQ本身并不是用于值分配,而是用于基于宏变量名称的按原样获取值。

filename parent 'C:\Temp';
%put NOTE: parent(path)=%qsysfunc(pathname(parent));

%let rc = %qsysfunc(DCREATE(%nrstr(Smith&Jones),parent));

filename sj 'C:\Temp\Smith&Jones';
%put NOTE: sj(path)=%qsysfunc(pathname(sj));

答案 1 :(得分:1)

宏处理器尝试处理双引号内的宏触发器。但这不在单引号内。此外,Windows命令行将需要在值两边加上引号&

>mkdir a&b
'b' is not recognized as an internal or external command,
operable program or batch file.

>mkdir "a&b"

因此,请更改您的过程以将命令括在单引号中,并将目录名括在双引号中。

data _null_;
  call symputX('command',quote('mkdir "Smith&Jones"',"'"));
run;
x &command ;

答案 2 :(得分:1)

@Tom Nice答案。
而且您对自己的方式如此封闭:

data _null_;
    call symput('mv1','d:\Users\avibe_000\Dropbox\htdocs\Landa2018\LDPdepartments\Smith&Jones');
run;

%let testmv1=%str(%")%superq(mv1)%str(%");
%put &testmv1;
x mkdir &testmv1;

答案 3 :(得分:0)

您可以使用Boemska macrocore库中的mf_mkdir宏-这也使用dcreate()并递归创建所需的任何子目录。它也作为宏函数提供(因此可以在代码中的几乎任何地方使用)。

/* import and compile (or go there and copy paste into your code */
filename mc url "https://raw.githubusercontent.com/Boemska/macrocore/master/base/mf_mkdir.sas";
%inc mc;

/* execute */
%mf_mkdir(/tmp/this %nrstr(&) that)

结果:

enter image description here

免责声明-我为Boemska工作!但是我一直在使用此宏,它永远不会让我失望。