如何从sym列提取单词首字母,生成带唯一标识的derived列?
解决方案
针对从事件表生成唯一短符号的需求,用KDB+可以按以下步骤实现:
核心思路
- 提取首字母组合:将
sym列的每个事件名称按空格拆分,提取各单词首字母并拼接成大写字符串; - 保证唯一性:对重复的首字母组合,为后续出现的条目添加递增序号作为前缀(首次出现无序号,第二次加
1,第三次加2,以此类推)。
完整实现代码
// 先对原表按sym去重,得到唯一事件表 uniqueTab: select by sym from tab; // 提取每个事件名称的首字母组合,统一转为大写 uniqueTab: update base: upper raze first each split sym from uniqueTab; // 为重复的首字母组合添加序号前缀,生成唯一的derived列 uniqueTab: update derived: $[i=0; base; string[i], base] by base from uniqueTab; // 查看最终结果(展示原事件名和对应的短符号) select sym, derived from uniqueTab
代码细节说明
split sym:把事件名称按空格拆分成单词列表;first each split sym:提取每个单词的首字母;upper raze ...:将首字母列表拼接成字符串并转为大写,确保格式统一;by base:按首字母组合分组,每组内的i是从0开始的索引;$[i=0; base; string[i], base]:每组第一个条目保留原首字母组合,后续条目添加对应序号作为前缀,保证derived列值唯一。
示例效果
比如假设有两个首字母组合均为FBS的事件:
- 第一个事件
"Fed Barkin Speech"的derived值为"FBS"; - 第二个事件(如
"Fed Brown Speech")的derived值为"1FBS",以此类推。
内容的提问来源于stack exchange,提问作者BlackPearl
相关产品推荐
相关产品推荐

