如何将短划线符号插入字符变量(SAS)?

时间:2013-10-19 19:09:21

标签: string replace sas

所以在SAS中我有一个长度为10的字符型变量fooword。我想要实现的是当应用自定义格式时

format fooword $fooformat.;
每两个符号(从右到左)后显示

破折号。换句话说, BERRY 看起来像 B-ER-RY STRAWBERRY 看起来像 ST-RA-WB-ER-RY 即可。

当然,我可以创建一个新的更长的变量并使用一堆substr()添加破折号,但这看起来像是我眼中的一个可怕的解决方案。

因此...

proc format;
    value $fooformat
    ???
    ;
run;

1 个答案:

答案 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函数,或者执行此操作,或者只是通过字符串遍历整个破折号。如果不是实际细节,那将更类似于使用格式。