sas - 从SAS中的字符串中删除单引号

标签 sas sas-macro

我需要从宏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/

相关文章:

sas - 宏似乎陷入无限循环,不知道如何调试

sas 输入宏日期,写为 yyyymmdd

sas - 在 SAS 中读取句点作为字符值

sas - 不使用SAS中的输入列表方法读取数值

formatting - 当长度为25时从字符转换为数字

SAS 宏错误 180-322 : Statement is not valid or it is used out of proper order

没有列标题的 Sas .dat 文件仅在 sas studio 中读取第一行

sql - 使用 SAS 或 SQL 查找一行中的第一个和最后一个非空值?

sas - 将自动调用库转换为存储的编译宏