如何将破折号插入字符变量 (SAS)



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

format fooword $fooformat.;

破折号符号显示在每两个符号之后(从右到左)。换句话说,BERRY看起来像B-ER-RY,STRAWBERRY看起来像ST-RA-WB-ER-RY

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

所以。。。

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

可悲的是,格式是不可能的。 可以使用 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 函数来执行此操作,或者只是遍历字符串,在整个过程中放置破折号。这将更类似于使用的格式,如果不是实际细节的话。

最新更新