gpt4 book ai didi

sas - SAS 中 TRANWRD 的问题

转载 作者:行者123 更新时间:2023-12-01 11:34:15 24 4
gpt4 key购买 nike

我有一个子字符串列表,我想从字符串列 (names) 中删除这些子字符串。我这样定义列表:

STR1 = ' - cake';
STR2 = ' - pie';
STR3 = ' - eclair';

ARRAY STR_TO_REM{*} STR1 - STR3;

我使用以下代码删除子字符串:

N=1;
DO WHILE (N <= DIM(STR_TO_REM));
STR_TO_REMOVE = TRIM(STR_TO_REM(N));
name = TRANWRD(name,STR_TO_REMOVE,'');
N = N+1;
END;

出于某种原因,这不起作用。例如,“Joe - cake”不会转换为“Joe”。作为测试,我直接尝试了代码

test = tranwrd('Joe - cake',' - cake','');

并获得了预期的输出,表明至少基本思想是合理的(我知道正则表达式是一种更好的方法,但我更感兴趣的是理解为什么代码此时会出现意外行为)。

但是,尽管变量的打印输出看起来相同,但 STR_TO_REMOVE 和 '-cake' 之间的相等性测试失败了。我觉得我在这里缺少一些基本的东西,非常感谢任何帮助。

最佳答案

这是因为你的修剪对你放置它的位置没有帮助。假设 Str_To_Remove 比任何特定值都长,它必须是因为您的值的长度不相同,它在静止时必须用空格填充。因此,您的修剪会删除空格,然后用空格替换这些空格,因为所有 SAS 字符串变量都会自动用空格填充到它们的全长。 SAS 中没有 varchar 或类似的概念:10 个字符的字符串包含 10 个字符,不多也不少。

在这种情况下,您必须在您的 tranwrd 函数调用本身中使用 trim。这是 tranwrd 的一个常见问题,在文档 here 的第二个示例中明确提到了这一点.我不知道为什么他们不像其他一些函数那样添加一个参数来要求自动修剪。

关于sas - SAS 中 TRANWRD 的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28989859/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com