1

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

format fooword $fooformat.;

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

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

所以...

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

1 回答 1

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 个 alpha 字符,然后对另一个 alpha 字符进行正向前瞻(因此它不会在末尾抛出一个),然后替换为相同的加破折号。您可以创建一个 FCMP 函数来执行此操作,或者简单地遍历整个字符串并放置破折号。如果不是在实际细节上,那将更类似于使用中的格式。

于 2013-10-20T04:37:38.567 回答