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);
为什么此代码不需要两个 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);