2013-10-19 94 views
1

所以在SAS中,我有一个长度为10个字符的变量fooword。我想做到的是,当应用自定义格式的每两个符号后显示如何将短划线符号插入字符变量(SAS)?

format fooword $fooformat.; 

破折号符号(从右到左)。换句话说BERRY会是什么样子B-ER-RY草莓会是什么样子ST-RA-WB-ER-RY

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

所以......

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

我会 - 愉快地 - 惊讶如果这是可能的。自定义格式是转换为静态值(静态as-in:预定义)。如果你希望你的功能可以灵活使用,最好考虑编写你的自定义函数或者一个小宏。如果你只需要一次,就把它写成数据步骤(的一部分)。 – mvherweg

+0

我不认为你可以用一种格式来做到这一点,但我敢打赌你可以用正则表达式。找到正确的正则表达式,在每个双字符序列后插入破折号,然后在SAS中使用PRXCHANGE函数。对不起,我自己并不知道正则表达式,但我敢打赌,如果你修改了这个问题并添加了“正则表达式”标签,你会得到很多答案。 – BellevueBob

回答

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函数,或者完成此操作,或者只是遍历字符串来重复遍历整个破折号。如果不是实际的细节,那将更类似于使用的格式。

相关问题