如何构造带单引号的SAS宏变量

问题描述 投票:0回答:3

我有一个宏变量:

%let names = name1, name2, name3, name4 

真实变量的长度可以变化。我想做的是创建一个新的变量数据列表,如下所示:

‘name1’,‘name2’,‘name3’,‘name4’

我尝试通过以下方式创建此变量:

%str(%’)%sysfunc(tranwrd(%quote(&names.),%str(,),%str(%’ ,%’)))%str(%’))

当我运行代码时,出现以下错误:

The meaning of an identifier after a quoted string might change in a future SAS release. Inserting white space between a quoted string and the succeeding identifier is recommended.

添加空格并没有帮助。有谁知道构造我想要的宏变量的不同方法?

PS:我看到了以下问题,但在该问题中没有用逗号分隔列表中的元素。 SAS宏变量引号

sas
3个回答
1
投票

使用之前使用的相同方法,但注意隐藏 %SYSFUNC() 中 NAMES 中的逗号。

%let names = name1, name2, name3, name4 ;
%let qnames = %sysfunc(tranwrd(%bquote('&names'),%str(, ),', '));

0
投票
38         proc sql noprint;
39            select quote(strip(name),"'") into :namelist separated by ', ' from sashelp.class;
40            quit;
NOTE: PROCEDURE SQL used (Total process time):
      real time           0.01 seconds
      cpu time            0.00 seconds
      

41         
42         %put NOTE: &=namelist;
NOTE: NAMELIST='Alice', 'Barbara', 'Carol', 'Jane', 'Janet', 'Joyce', 'Judy', 'Louise', 'Mary', 'Alfred', 'Henry', 'James', 
'Jeffrey', 'John', 'Philip', 'Robert', 'Ronald', 'Thomas', 'William'

0
投票

我无法让其他方法发挥作用。这个可憎的事做了:

%global quoted_list;
%let request_status = item1+item2+item3;

%macro parselist(s);
  data work.tmplist;
    %do i = 1 %to %sysfunc(countw(&s,"+"));
      %let word = %scan(&s,&i,"+");
      x="&word";
      output;
    %end;
  run;

  proc sql NOprint;
    select quote(trim(x),"'") into :quoted_list separated by ', ' from tmplist;
  quit;
%mend;

%macro main();
  %if "X&request_status." ne "X" %then %do;
    %parselist(&request_status.);
    %put &quoted_list;
  %end;
%mend;
%main;
© www.soinside.com 2019 - 2024. All rights reserved.