【发布时间】:2013-09-25 21:23:59
【问题描述】:
我想从 SAS 数据集中的一组变量中删除最后 3 个字母。 (必须连接 2 个数据集。)
并且在第一组中,变量被命名为例如: abc , 定义, 吉...
在第二组中,它们被命名为: abc_1A , def_1A , ghi_1A ...
如何从 100 多个变量中删除“_1A”?我不想简单地将“_1A”添加到我的第一个数据集
谢谢
【问题讨论】:
标签: sas
我想从 SAS 数据集中的一组变量中删除最后 3 个字母。 (必须连接 2 个数据集。)
并且在第一组中,变量被命名为例如: abc , 定义, 吉...
在第二组中,它们被命名为: abc_1A , def_1A , ghi_1A ...
如何从 100 多个变量中删除“_1A”?我不想简单地将“_1A”添加到我的第一个数据集
谢谢
【问题讨论】:
标签: sas
有几个选项。这是一个“安全”选项和一个“不安全”选项。
安全选项:
编写一个宏将变量重命名为不带 _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;
【讨论】: