使用另一个数组中的名称重命名数组中的变量

时间:2017-10-06 12:10:32

标签: macros sas

我试图以下面的方式重命名基于一个数组元素的变量,

%let var= class name gender;

data want; 
set have;

%global noof; 

array point(*)$   %str(&var)  ;
a=dim(point);
call symputx('noof',a);


array newvar(&noof);


do i=1 to &noof;

newvar(i)=translate(point(i),',','.');

end; 

drop &var; 

do i=1 to &noof;

rename newvar(i)=vname(point(i));

end; 

运行;

我想将新变量重命名为第一个数组元素。

LOG:

 rename newvar(i)=vname(point(i));
                  -
                  22
                  76
ERROR 22-322: Syntax error, expecting one of the following: -, :, =.

ERROR 76-322: Syntax error, statement will be ignored.

1 个答案:

答案 0 :(得分:1)

不幸的是,RENAME语句的RHS值必须是文字。该语句在编译时进行评估,而不是在运行时进行评估。

试试这个:

%let var= class name gender;

%macro translate(datain,dataout,vars);
%local n i var;
%let n=%sysfunc(countw(&vars));


data &dataout(rename=(
    %do i=1 %to &n;
        %let var = %scan(&vars,&i);
        newvar&i = &var
    %end;
)); 
set &datain;

array invars(&n) $  &vars  ;

array newvar(&n) $;


do i=1 to &n;
    newvar(i)=translate(invars(i),',','.');
end; 

drop &vars i; 

run;
%mend;

data test;
class = "1,2,3";
name= "Dom,Pazzula";
gender="M";
run;

%translate(test,out,&var);

如果这些字符变量的长度太大,您可能会遇到问题。新变量可能会被截断。您必须对其进行修改才能添加length语句。