SAS编程:英文字符如何首个单词首字母大写?

欢迎关注,SAS茶谈!

工作中出一张表,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

事情出现了转机,这个参数的功能是:

指定一个或多个用引号括起来的分隔符。
默认的分隔符是空白、正斜杠、连字符、开括号、句点和制表符。
Tip: 如果使用此参数,则默认分隔符(包括空格)将不再有效。

Propcase

我苦恼的问题是,propcase函数会把每一个单词都首字母大写;而区分“每个单词”的是它们之间的空格——默认的分隔符,如果我指定分隔符不是空格,那我处理的字符不就成了“一个单词”,那这个“单词”首字母大写就实现了我想要的功能

最后,方法很简单,我随便指定一个分隔符,不那么繁琐地实现首个单词首字母大写的功能。

data test;
  set adam.adae;
  t1 = propcase(aeloc, "\");
run;

结语

文章分享了,我实现英文字符首个单词首字母大写的过程。首先想到的方法,思路简单,但实现起来“繁琐”;在寻找简洁方法的过程中,发现了propcase函数的delimiter参数可以解决我的问题。

实际工作中,并非每次尝试都能成功找到简洁的方法,最根本的目的还是将问题解决。毕竟,不管黑猫白猫,能抓到老鼠的就是好猫。如果短时间内找不到一个简洁的方法,笨方法不失为一个好方法

不过,多记录、多积累,会加大找到简洁方法的概率

感谢阅读, 欢迎关注:SAS茶谈!
若有疑问,欢迎评论交流!

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容