删除公共前缀或后缀
removing common prefix or suffix
我有一个数据集包含一系列名为; PG_86xt, AG_86xt,...
具有相同的后缀 _86xt
。如何在重命名这些变量时删除此类后缀?
我知道如何add prefix or suffix。但是删除它们的逻辑似乎有点不同。我认为 proc dataset modify
仍然是可行的方法。但是后缀之前(或前缀之后)的子串长度是未知的。
如何添加前缀或后缀的示例
data one;
input id name :. age score1 score2 score3;
datalines;
1 George 10 85 90 89
2 Mary 11 99 98 91
3 John 12 100 100 100
4 Susan 11 78 89 100
;
run;
proc datasets library = work nolist;
modify one;
rename &suffixlist;
quit;
您可以使用 index
函数在每个变量名称中找到后缀/前缀开始的(第一个)位置,然后使用它为 substr
构造适当的参数。它比您示例中的代码要多一些工作,但您会到达那里。
您可以使用 scan
函数来获得想要的结果。
通过更改 link 中的示例以适合您的示例:
data one;
input id name :. age PG_86xt AG_86xt IG_86xt;
datalines;
1 George 10 85 90 89
2 Mary 11 99 98 91
3 John 12 100 100 100
4 Susan 11 78 89 100
;
run;
通过仅过滤那些符合您的约定的列 (XX_86xt
),您可以使用扫描的第一部分进行重命名。
proc sql noprint;
select cats(name,'=',scan(name, 1, '_'))
into :suffixlist
separated by ' '
from dictionary.columns
where libname = 'WORK' and memname = 'ONE' and '86xt' = scan(name, 2, '_');
quit;
我有一个数据集包含一系列名为; PG_86xt, AG_86xt,...
具有相同的后缀 _86xt
。如何在重命名这些变量时删除此类后缀?
我知道如何add prefix or suffix。但是删除它们的逻辑似乎有点不同。我认为 proc dataset modify
仍然是可行的方法。但是后缀之前(或前缀之后)的子串长度是未知的。
如何添加前缀或后缀的示例
data one;
input id name :. age score1 score2 score3;
datalines;
1 George 10 85 90 89
2 Mary 11 99 98 91
3 John 12 100 100 100
4 Susan 11 78 89 100
;
run;
proc datasets library = work nolist;
modify one;
rename &suffixlist;
quit;
您可以使用 index
函数在每个变量名称中找到后缀/前缀开始的(第一个)位置,然后使用它为 substr
构造适当的参数。它比您示例中的代码要多一些工作,但您会到达那里。
您可以使用 scan
函数来获得想要的结果。
通过更改 link 中的示例以适合您的示例:
data one;
input id name :. age PG_86xt AG_86xt IG_86xt;
datalines;
1 George 10 85 90 89
2 Mary 11 99 98 91
3 John 12 100 100 100
4 Susan 11 78 89 100
;
run;
通过仅过滤那些符合您的约定的列 (XX_86xt
),您可以使用扫描的第一部分进行重命名。
proc sql noprint;
select cats(name,'=',scan(name, 1, '_'))
into :suffixlist
separated by ' '
from dictionary.columns
where libname = 'WORK' and memname = 'ONE' and '86xt' = scan(name, 2, '_');
quit;