【问题标题】:Is there a better way to replace sas text string other than using tranwrd function除了使用 tranwrd 函数之外,是否有更好的方法来替换 sas 文本字符串
【发布时间】:2015-10-10 18:32:51
【问题描述】:

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

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

输入数据集有超过 100000 个观测值

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

非常感谢您

拉克什。

【问题讨论】:

  • 您能给我们提供一些文本来测试和您期望的结果吗?
  • 如果您熟悉正则表达式,那可能是一个更好的解决方案,但如果您不熟悉,我会坚持使用 tranwrd。
  • 这也取决于您是否想要这样做。如果您只是给我们提供了一些您的编辑示例,那么这种方法确实不切实际,我也建议使用正则表达式。

标签: sas


【解决方案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 变量的长度并确保它不会过长。非常长的字符变量在对它们运行字符函数时会花费相对较长的时间。

【讨论】:

  • 您的样本中缺少 4 个分号。 (如果只有 6 个,我可以自己修复它......)
【解决方案2】:

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

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

或更明确地说:

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

【讨论】:

  • 该命令还将删除这些字母的任何出现。因此它将删除所有大写和小写 E。所有的 t 和 s 等等。
猜你喜欢
  • 2011-06-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-11-12
  • 1970-01-01
  • 1970-01-01
  • 2017-10-07
相关资源
最近更新 更多