SAS创建含&符号命名文件夹问题求助
解决SAS创建含&字符文件夹的问题
这个问题的核心是SAS宏处理和**Windows命令行(CMD)**对特殊字符的解析规则不一样,咱们一步步拆解解决:
问题原因
你用%superq(mv1)确实阻止了SAS宏层面把&Jones当成宏变量去解析,但当SAS通过x命令调用Windows CMD执行mkdir时,CMD会把&识别为命令分隔符——也就是说,CMD会把mkdir Smith&Jones拆成两个命令:mkdir Smith和Jones,自然就只创建了Smith文件夹。
两种可行解决方案
方案1:给文件夹名包裹双引号
在Windows CMD里,用双引号包裹的字符串会被当成一个完整的参数,里面的特殊字符会失去原有含义。SAS里要输出双引号,需要用两个双引号转义,修改后的代码如下:
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"""; /* 用双引号包裹文件夹名,SAS中双引号转义为两个连续双引号 */
方案2:转义CMD中的&字符
Windows CMD里用^作为转义符,把&转成^&就能让它变成普通字符。你可以在生成宏变量时直接替换:
x "cd c:\Users\avibe_000\Dropbox\htdocs\Landa2018\LDPdepartments"; data _null_; original_name = 'Smith&Jones'; /* 把&替换为CMD可识别的转义形式^& */ escaped_name = tranwrd(original_name, '&', '^&'); call symputx('mv1', escaped_name); run; %let testmv1=%superq(mv1); %put &testmv1 ; x "mkdir &testmv1";
两种方案都能让CMD正确识别Smith&Jones是一个完整的文件夹名称,顺利创建出你想要的文件夹。
内容的提问来源于stack exchange,提问作者user3387046
相关产品推荐
相关产品推荐

