除了使用tranwrd函数之外,是否有更好的方法来替换sas文本字符串

时间:2015-07-21 10:40:16

标签: sas

我需要在sas中替换一系列文本字符串。我使用下面的代码替换字符串,它工作正常。

但仍然想知道,有没有比这更好更强大的方法来替换文本字符串?

输入数据集的观察次数超过100000次

_PARAM = tranwrd(tranwrd(tranwrd( tranwrd(tranwrd(param,'/Erythrocytes ',''),'/Leukocytes ',''), '^3','!{super 3}' ), '^6', '!{super 6}'),'/uL', '/µL');

非常感谢您提前

勒凯什。

2 个答案:

答案 0 :(得分:1)

为了使其更具可读性,您可以将函数调用分成多行,如下所示:

param = tranwrd(param,'/Erythrocytes ', '');
param = tranwrd(param,'/Leukocytes '  , '');
param = tranwrd(param, '^3'           , '!{super 3}' );
param = tranwrd(param, '^6'           , '!{super 6}');
param = tranwrd(param,'/uL'           , '/µL');
_param = param;

为了使其更加强大,您可以考虑将其全部转换为大写或小写(upcase()lowcase()),以确保您的tranwrd()函数与字符串匹配(如果输入变化)。

编辑:您似乎也可能对性能感到担忧。即使在具有数百万观测值的数据集上,这些操作也应该非常快。如果您发现情况并非如此,那么您可能需要检查param变量的长度并确保它不会过长。当针对它们运行字符函数时,很长的字符变量将花费相对较长的时间。

答案 1 :(得分:-2)

如果你想删除文本,即用“”替换,那么你可以简单地使用 compress 函数。因此,对于您想要摆脱“/红细胞”和“/白细胞”的情况,您可以使用:

param = compress(param,'/ErythrocytesLeukocytes ');

或更明确地说:

param = compress(param,'/ErythrocytesLeukocytes ', '');