工作中出一张表,AE发生部位的频数汇总。ADAE中AELOC的值是大写,由于shell中没有指明显示的大小写,在统计师确认前,我先首字母展现出来,使用函数propcase
:
data test;
set adam.adae;
t1 = propcase(aeloc);
run;
后来,统计师要求只需要首个单词首字母大写。对于这个要求,我心里一下子觉得变扭。为什么呢?因为前面一个propcase
函数实现,代码简洁;而对于统计师的要求,我脑袋里第一个想法是,提取字符的第一个单词后,使用propcase
函数处理,对于剩下的再使用lowcase
函数处理后,与前半部分拼接。仔细一想,繁琐了“一点点”。
第一个想法,能实现要求,但是我内心不太愿意去实现。于是,寻求其他方法来实现。
首当其冲,就是想SAS中是否有实现首个单词首个字母大写的函数,直接的行动就是翻SAS函数字典(SAS Help Center: Dictionary of Functions and CALL Routines)。
Dictionary of Functions and CALL Routines但是,这么埋头一个一个看下去,效率太低。又想到,在介绍一个函数的末尾,官方文档中会附加相类似功能的函数的链接。那propcase
函数的介绍结尾,会不会有我想要的函数链接呢?
我去看了下,很可惜,只有全部大写或小写的函数。这也说明,SAS中可能没有直接实现字符首个单词首字母大写的函数。
Propcase在失望之余,我看起了propcase
函数的介绍,看到这个函数还有另一个参数delimiter
。
事情出现了转机,这个参数的功能是:
Propcase指定一个或多个用引号括起来的分隔符。
默认的分隔符是空白、正斜杠、连字符、开括号、句点和制表符。
Tip: 如果使用此参数,则默认分隔符(包括空格)将不再有效。
我苦恼的问题是,propcase
函数会把每一个单词都首字母大写;而区分“每个单词”的是它们之间的空格——默认的分隔符,如果我指定分隔符不是空格,那我处理的字符不就成了“一个单词”,那这个“单词”首字母大写就实现了我想要的功能!
最后,方法很简单,我随便指定一个分隔符,不那么繁琐地实现首个单词首字母大写的功能。
data test;
set adam.adae;
t1 = propcase(aeloc, "\");
run;
结语
文章分享了,我实现英文字符首个单词首字母大写的过程。首先想到的方法,思路简单,但实现起来“繁琐”;在寻找简洁方法的过程中,发现了propcase
函数的delimiter
参数可以解决我的问题。
实际工作中,并非每次尝试都能成功找到简洁的方法,最根本的目的还是将问题解决。毕竟,不管黑猫白猫,能抓到老鼠的就是好猫。如果短时间内找不到一个简洁的方法,笨方法不失为一个好方法。
不过,多记录、多积累,会加大找到简洁方法的概率。
感谢阅读!若有疑问,欢迎评论区交流!
网友评论