2

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

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!
4

1 回答 1

3

简短的回答是您可以在此处使用 SYMGET:

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

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

FriedEgg (Matt) 从 SAS-L 发布了以下附加解决方案:

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;
于 2013-06-05T14:10:32.430 回答