从包含引号,双引号和不匹配引号的宏变量创建数据集变量

时间:2013-06-05 09:43:01

标签: sas sas-macro

总之,我正在努力实现以下目标:

data _null_;
input x  $ 1-50 ;
call symput('problem',x);
cards4;
'this' "is '' my "string"" from 'hell!
;;;;
run;

data _null_;
x="%superQ(problem)";
put x=;
run;

superq函数可以很好地管理不匹配的引号,但是连续的引号(“”)仍然被解析为变量X中的单引号。

这可以解决吗?

目前的结果:

x='this' "is '' my "string" from 'hell!

期望的结果:

x='this' "is '' my "string"" from 'hell!

1 个答案:

答案 0 :(得分:3)

简短的回答是你可以在这里使用SYMGET:

data _null_;
x=symget("problem");
put x=;
run;

如果由于某种原因这不是一个选项,请提供有关上下文的更多信息。我还会看看是否可以指出Toby(SAS-L宏引用大师)或其他一些人在这里,看看他们是否有任何建议在没有SYMGET的情况下处理这个问题。

来自SAS-L,FriedEgg(马特)发布了以下额外解决方案:

resolve=resolve('%superq(problem)');

他还指出,如果你能控制它,你可以在途中掩饰它:

data _null_;
input x  $ 1-50 ;
call symput('problem',quote(x));
cards4;
'this' "is '' my "string"" from 'hell!
;;;;
run;

data _null_;
  x=&problem;
  put x=;
run;