删除sas变量集的最后3个字母

删除sas变量集的最后3个字母,sas,Sas,我想从SAS数据集中的一组变量中删除最后3个字母。 (必须包含2个数据集。) 在第一组中,变量被命名为,例如: 美国广播公司, def, ghi 在第二组中,它们被命名为: abc_1A, def_1A, ghi_1A 如何从100多个变量中删除“_1A”?我不想简单地将“1A”添加到我的第一个数据集中 谢谢有几个选择。这里有一个“安全”选项和一个“不安全”选项 安全选项: 编写宏以将变量重命名为其名称,而不使用_1A。; 参数:var=变量名,len=最终变量名所需的长度 %macro ren

我想从SAS数据集中的一组变量中删除最后3个字母。 (必须包含2个数据集。)

在第一组中,变量被命名为,例如: 美国广播公司, def, ghi

在第二组中,它们被命名为: abc_1A, def_1A, ghi_1A

如何从100多个变量中删除“_1A”?我不想简单地将“1A”添加到我的第一个数据集中


谢谢

有几个选择。这里有一个“安全”选项和一个“不安全”选项

安全选项:

编写宏以将变量重命名为其名称,而不使用_1A。; 参数:var=变量名,len=最终变量名所需的长度

%macro rename_shorter(var=,len=);
&var. = %substr(&var.,1,&len.)
%mend rename_shorter;
从dictionary.columns创建调用列表

proc sql;
select cats('%rename_shorter(var=',name,',len=',length(name)-3,')') 
 into :renamelist separated by ' '
 from dictionary.columns
 where libname='SASHELP' and upcase(memname)='CLASS';
quit;
称之为列表

data want;
set sashelp.class(rename=(&renamelist.));
run;
不安全的选项是

proc sql;
create table want as 
 select * from have_namedright H
 outer union corr
 select * from have_namedwrong W
;
quit;

请注意,此代码不会按原样运行,因为某些列名只有三个字符长。