SAS:引用问题

时间:2016-10-27 19:28:04

标签: sas sas-macro quoting

我正在尝试从SAS内部生成脚本。不幸的是,我需要写一行

strMSHTA = "mshta.exe ""about:<input type=file id=FILE>" _
      & "<script>FILE.click();new ActiveXObject('Scripting.FileSystemObject')" _
      & ".GetStandardStream(1).WriteLine(FILE.value);close();resizeTo(0,0);</script>"""

要将脚本写入文件,我使用以下方法:

/* write the script to file */
filename outfile ".\temp.vbs";
data _null_;
  file outfile;
  put 'WScript.Echo "Hello, World!"';
run;

/* run the script */
data _null_;
  call system(".\temp.vbs");
run;

/* housekeeping */
%let rc=%sysfunc(fdelete(outfile));
%symdel rc;
filename outfile clear;

不幸的是,put语句并不适用于&'"。我已经尝试了所有的macro quoting functions,但无法得到任何工作。如有必要,我可以使用重载的并置运算符+而不是&。由于ActiveXObject('Scripting.FileSystemObject')上的单引号,这样做只会使中间行出错。有什么想法吗?

1 个答案:

答案 0 :(得分:1)

我不确定我是否理解这个问题。在文字字符串的外部使用单引号而不是双引号将无需担心像&%这样的宏触发器,但您仍然需要将任何文字单引号字符加倍需要生成。

put 
 'strMSHTA = "mshta.exe ""about:<input type=file id=FILE>" _'
/'      & "<script>FILE.click();new ActiveXObject(''Scripting.FileSystemObject'')" _'
/'      & ".GetStandardStream(1).WriteLine(FILE.value);close();resizeTo(0,0);</script>"""'
;

您还可以将字符串文字分成多个字符串文字,并为每个字符串使用不同的外部引号。

put 
 'strMSHTA = "mshta.exe ""about:<input type=file id=FILE>" _'
/'      & "<script>FILE.click();new ActiveXObject('
 "'Scripting.FileSystemObject'" 
 ')" _'
/'      & ".GetStandardStream(1).WriteLine(FILE.value);close();resizeTo(0,0);</script>"""'
;