SAS trim 函数/长度语句

SAS trim function/ Length statement

为什么此代码不需要两个 trim 语句,一个用于名字,一个用于姓氏?长度语句是否删除空格?


data work.maillist; set cert.maillist;
length FullName $ 40;
fullname=trim(firstname)||' '||lastname; 
run;

你认为应该这样做有什么理由吗?你能看到姓氏后面的 space 吗,你试过 length() 函数了吗?
我在这里可能是错的,但有时当您应用函数(尤其是 put)或导入数据时,您可能会无意中存储前导或尾随 space。尾随的 space 是个谜,因为在您尝试对数据执行其他操作之前,您不会意识到它们的存在。
如果您正确使用 number/character 变量,并且仅当长度值太短时才发生截断,则长度语句应该允许您准确地存储您提供的数据。 我发现 compress() 函数最适合处理白色 space 和标点符号,尤其是在连接变量时。

https://www.geeksforgeeks.org/sas-compress-function-with-examples/

祝一切顺利,

菲尔

因为当值太长无法放入 FULLNAME 时,SAS 会截断该值。当它太短时,它将用空格填充 FULLNAME 的其余部分,因此无需删除它们。

只有当 FULLNAME 的长度小于 FIRSTNAME 和 LASTNAME 的长度加一时,才会出现问题。否则,即使 FIRSTNAME 或 LASTNAME 中没有尾随空格,结果也不能太长而无法放入 FULLNAME。

自己尝试使用非空值,这样更容易看出发生了什么。

1865  data test;
1866    length one  two  three  ;
1867    one = 'ABCD';
1868    two = 'ABCD';
1869    three='ABCD';
1870    put (_all_) (=);
1871  run;

one=A two=AB three=ABC
NOTE: The data set WORK.TEST has 1 observations and 3 variables.

length 是一个声明性语句,它向程序数据向量 (PDV) 中引入了一个具有您指定的特定长度的变量。当公式中使用未声明的变量时,SAS 将根据公式或使用上下文为其分配默认长度。

SAS中的字符型变量长度固定,右边用空格补齐。这就是为什么在发生 || lastname 连接时需要 trim(firstname) 的原因。如果不是,firstname 的右填充将成为连接操作中值的一部分,并且 可能 超过接收结果的变量的长度。

有拼接函数可以简化字符串操作

  • CAT 与使用 <var>|| 运算符相同
  • CATT 与使用 trim(<var>)||
  • 相同
  • CATS 与使用 trim(left(<var>))||
  • 相同
  • CATX 与使用带分隔符的 CATS 相同。
  • STRIP 等同于 trim(left(<var>))

您的表达式可以重新编码为:

fullname = catx(' ', firstname, lastname);