提问人:Franklin 提问时间:9/13/2022 最后编辑:PᴇʜFranklin 更新时间:9/19/2022 访问量:255
SAS宏字符串引用问题导致IN操作不起作用?
SAS macro string quoting issues causing IN operation not working?
问:
都: 执行 IN 运算符以匹配宏字符串中的单词时,引号是必需的。但是,结果很沮丧,有人会提醒我我错过了什么吗? 此宏字符串是从 proc sql 创建的,如下所示 '''
proc sql noprint;
select memname into :domains separated by ' '
from sashelp.vtable
where libname='SDTM';
quit;
''' 接下来,我使用此语句引用了字符串 '''
%let domains_quoted = %nrbquote(')%qsysfunc(prxchange(s/\s+/%nrbquote(',')/oi,-1,&domains))%nrbquote(');
''' 在日志中,它没有显示任何问题
SYMBOLGEN: Macro variable DOMAINS_QUOTED resolves to 'AE','CM','DM','DS','EG','EX',...
然后,我希望我可以过滤输出数据集。 '''
data want;
set have;
if dname in (&domains_quoted);
run;
''' 我收到错误消息说:
SYMBOLGEN: Some characters in the above value which were subject to macro quoting have been unquoted for printing.
ERROR 22-322: Syntax error, expecting one of the following: a quoted string, a numeric constant, a datetime constant,
a missing value, iterator, (.
有人会提醒我在这些步骤中错过了什么吗?非常感谢。
答:
0赞
Reeza
9/13/2022
#1
使用 QUOTE() 函数避免 PRX 步骤。
proc sql noprint;
select quote(memname) into :domains separated by ' '
from sashelp.vtable
where libname='SDTM';
quit;
data want;
set have;
if dname in (&domains_quoted);
run;
评论
0赞
Franklin
9/13/2022
你的代码工作得很好。
评论