在SAS使用循环重命名索引列?

时间:2011-02-20 10:19:42

标签: sas

我有一个数据集,变量为col1,col2,col3,...,col15。我想将它们重命名为new1,new2,new3,...,new 15.我可以写15次相似的重命名col1 = new1;在SAS中,但我如何使用循环实现此目的?感谢。

2 个答案:

答案 0 :(得分:9)

首先,目前尚不清楚您是在谈论rename中还是数据步骤中的proc datasets语句。如果您不需要对数据执行任何其他操作,则应该使用proc数据集来执行此操作,因为否则(在数据步骤中)您不必要地读取/写入数据集中的每个记录,只是为了更改变量名称

如果 使用数据步骤,请使用

rename col1-col15=new1-new15;

我不确定您是否可以在proc数据集中使用该快捷方式。这将我们带到你的循环问题。除非您多次或动态地执行此操作,否则复制/粘贴代码15次可能同样容易。这是一种生成所需语句的方法,将其放在宏变量中,并在重命名语句中使用该宏变量:

data _null_;
  length myVar $ 1000;
  *myVar='';
  do i=1 to 15;
    myVar=catx(' ',myVar,' ',cats('col',i,'=','new',i));
  end;
  call symput('rename',myVar);
run;

%put &rename;

proc datasets library=mylibrary;
  modify mydataset;
  rename &rename;
run;

答案 1 :(得分:3)

如果你的变量名称符合一个漂亮,简单的命名模式,这是一种方法:

 DATA out;
 SET  in;
 ARRAY oldnames (15) col1-col15;
 ARRAY newnames (15) new1-new15;
 DO i = 1 TO 15;
      newnames(i) = oldnames(i) ;
 END;
 RUN;

或者更一般地说:

 DATA out;
 SET  in;
 ARRAY oldnames (4) abc def ghi jkl ;
 ARRAY newnames (4) mno pqr stu vwx ;
 DO i = 1 TO 4;
      newnames(i) = oldnames(i) ;
 END;
 RUN;