所以在SAS中我有一个长度为10的字符型变量fooword
。我想要实现的是当应用自定义格式时
format fooword $fooformat.;
每两个符号(从右到左)后显示破折号。换句话说, BERRY 看起来像 B-ER-RY 而 STRAWBERRY 看起来像 ST-RA-WB-ER-RY 即可。
当然,我可以创建一个新的更长的变量并使用一堆substr()
添加破折号,但这看起来像是我眼中的一个可怕的解决方案。
因此...
proc format;
value $fooformat
???
;
run;
答案 0 :(得分:1)
遗憾的是格式不可能。可以使用FCMP功能或正则表达式。可能有效的正则表达式就是这样:
data test;
length origtext fintext $50;
input origtext $;
fintext=prxchange('s/([a-z]{2})(?=[a-z])/$1-/io',-1,origtext);
put origtext= fintext=;
datalines;
BLACKHOLES
GRAVITYWELL
DOREMIFASOLATI
;;;;
run;
查找2个字母字符,然后查找另一个字母字符的正向前瞻(因此它不会将一个字符串扔到最后),然后替换为相同的加上破折号。您可以创建一个FCMP函数,或者执行此操作,或者只是通过字符串遍历整个破折号。如果不是实际细节,那将更类似于使用格式。