我有一个宏变量:
%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宏变量引号
使用之前使用的相同方法,但注意隐藏 %SYSFUNC() 中 NAMES 中的逗号。
%let names = name1, name2, name3, name4 ;
%let qnames = %sysfunc(tranwrd(%bquote('&names'),%str(, ),', '));
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'
我无法让其他方法发挥作用。这个可憎的事做了:
%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 "ed_list;
%end;
%mend;
%main;