我需要从宏retrieve_context 中读取带有单引号和不带引号的字符串。
调用宏时,用户可以使用单引号或不使用引号来调用它,如下所示:
%retrieve_context('american%s choice', work.phone_conv, '01OCT2015'd, '12OCT2015'd)
%retrieve_context(american%s choice, work.phone_conv, '01OCT2015'd, '12OCT2015'd)
如何在没有单引号的情况下读取宏中的第一个参数?
我试过
%conv_quote = unquote(%str(&conv_quote))
但它没有用。
最佳答案
您遇到了宏和数据步骤语言之间的差异之一。
在宏中,有一个“引用”的概念,因此 %unquote
宏功能。这不是指传统的 "
或 '
字符,虽然;宏引用是一个单独的东西,实际上没有任何引号字符[在这方面的某些上下文中使用了一些字符,但它们更像是占位符]。它们来自 %str
等函数, %nrstr
, 和 %quote
,它标记了宏变量中的某些事物,以便在它们被预期之前不会被解析。
但是,在大多数情况下,宏语言并不真正关注 '
。和 "
字符,除非在某些解析上下文中标识带引号的字符串,在这些上下文中必须这样做以使事情合乎逻辑。因此,%unquote
不对引号做任何事情;它们被简单地视为常规字符。
相反,您需要调用数据步骤函数来删除它们(或其他一些东西,但它们都更复杂,比如使用 %substr
和 %index
的各种组合)。这是使用 %sysfunc
完成的。 ,像这样:
%let newvar = %sysfunc(dequote(oldvar));
Dequote()
是数据阶跃函数,其功能与 %unquote
大致相同,但对于普通引号字符( "
, '
)。根据您的最终使用情况,您可能需要做的还不止这些;汤姆涵盖了其中几种可能性。
关于sas - 从SAS中的字符串中删除单引号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33090797/