SAS - 重命名变量

时间:2015-10-08 08:52:15

标签: variables sas rename

我正在尝试更改表/数据集中变量的名称。我经历了几个网站和这个讨论论坛,但我没有设法找到任何能够在我的情况下正常工作的代码(我是SAS的新手)。

我的数据集包含103列,我想重命名前100列。第一列的名称是CFT(1),第二列的CFT(2),......,第100列的CFT(100)。可以调用新变量,例如CFT_n(1),...,CFT_n(100)。

我正在使用的代码如下:

data vystup_m200_b;
set vystup_m200_a;
rename 'cft(1)'n - 'cft(100)'n='cft(1)_n'n - 'cft(100)_n'n;
run;   

但我得到一个错误说明:

Aplhabetic prefixes for enumerated variables (cft(1)-cft(100)) are different.

感谢您提出我的错误建议。

3 个答案:

答案 0 :(得分:2)

即使使用validvarname =编号变量列表中的任何数字后缀都必须将该数字作为名称的最后一部分。您“可以”使用PROC TRANSPOSE的功能来翻转数据以重命名变量。仅当数据相当小时才建议这样做。

data ren;
   array _a[*] 'cft(1)'n 'cft(2)'n 'cft(3)'n ( 1 2 3);
   do i = 1 to 10;
      output;
      end;
   drop i;
   run;
proc transpose data=ren out=ren2;
   run;
proc transpose data=ren2 out=renamed(drop=_name_) suffix=_N;
   id _name_;
   run;

enter image description here

答案 1 :(得分:0)

重命名最快。我会寻求一个更通用的解决方案,不需要知道任何名称或数量,或者如果你需要名字文字。

data ren;
   array _a[*] 'cft(1)'n 'cft(2)'n 'cft(3)'n (1 2 3);
   do i = 1 to 10;
      output;
      end;
   drop i;
   run;
proc print;
   run;
proc transpose data=ren(obs=0) out=ren2;
   run;
proc sql noprint;
   select catx('=',nliteral(_name_),nliteral(cats(_name_,'_n'))) 
      into :renamelist separated by ' '
   from ren2;
   quit;
   run;
%put NOTE: &=renamelist;
proc datasets nolist;
   modify ren;
   rename &renamelist;
   run;
   contents data=ren varnum short;
   quit;

enter image description here

答案 2 :(得分:0)

另一种解决方案,即上传后重命名变量:

getClass().equals()