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

Nag*_*ala 4 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)
Run Code Online (Sandbox Code Playgroud)

如何在没有单引号的情况下读取宏中的第一个参数?

我试过%conv_quote = unquote(%str(&conv_quote))但它没用.

Joe*_*Joe 5

您遇到了宏和数据步骤语言之间的差异之一.

在宏中,存在"引用"的概念,因此是%unquote宏功能.但这并不是指传统"'字符; 宏引用是一个单独的东西,并没有真正的引用字符[在某些情况下有一些类型的字符用于这方面,但它们更像是占位符].它们来自像%str,%nrstr和等函数%quote,它们将宏变量中的某些内容标记化,以便在它们打算之前不会对它们进行解析.

但是,在大多数情况下,宏语言并没有真正关注'"字符,除了在某些解析上下文中标识带引号的字符串,在这种情况下必须这样做以使逻辑上的工作.因此,%unquote对引号没有任何作用; 他们被简单地视为常规角色.

你需要,而是调用数据阶跃函数将其删除(或一些其他的东西,但所有的人都比较复杂,如使用的各种组合%substr%index).这是使用%sysfunc,如下所示:

%let newvar = %sysfunc(dequote(oldvar));
Run Code Online (Sandbox Code Playgroud)

Dequote()是数据步骤函数,它执行与大致相同的函数%unquote,但对于正常引用字符(",').根据您的最终用途,您可能需要做更多的事情; 汤姆涵盖了其中几种可能性.