SAS宏字符串引用问题导致IN操作不起作用?

SAS macro string quoting issues causing IN operation not working?

提问人:Franklin 提问时间:9/13/2022 最后编辑:PᴇʜFranklin 更新时间:9/19/2022 访问量:255

问:

都: 执行 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, (.

有人会提醒我在这些步骤中错过了什么吗?非常感谢。

字符串 SAS 引用 SAS-宏

评论


答:

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
你的代码工作得很好。