僕の頁 <SASと臨床試験と雑談と>

徒然なるままにSAS暮らし

0731

ANYで始まる関数  

SASには文字列関連の関数が多数用意されていますが、9.1.3から追加されていたものの今まで使ったことがなかったANYシリーズの関数を試してみました。今更感甚だしいのですが、これが意外と使えそうで面白いことに気づきました。今まで文字列の抽出は、「普通の関数が面倒 or ダメ」⇒「Perl関数(PRXシリーズ)で抽出」という流れでプログラミングしていたのですが、ANYシリーズがあればPerl関数がなくても簡単に記述できる場面がありそうですね。

最初にアルファベットが登場する位置(ANYALPHA)や、最初の大文字(ANYUPPER)、小文字の位置(ANYLOWER)、空白の位置(ANYSPACE)、特殊文字(ANYPUNCT)やSAS変数名に使える文字の位置(ANYNAME)等々、色々な文字列の位置を返すことができます。データの入力ルールがある程度決まっているような場合はPerl関数使うより単純化されるんじゃないかと思います。以下では、変数xが文字列、funcが関数名、aが対象となる文字列の位置になります。

data test ;
x="%123_ - Abc" ;
length func $9. ;

func = "ANYALNUM" ; a = ANYALNUM(x) ; output ;
func = "ANYALPHA" ; a = ANYALPHA(x) ; output ;
func = "ANYCNTRL" ; a = ANYCNTRL(x) ; output ;
func = "ANYDIGIT" ; a = ANYDIGIT(x) ; output ;
func = "ANYFIRST" ; a = ANYFIRST(x) ; output ;
func = "ANYGRAPH" ; a = ANYGRAPH(x) ; output ;
func = "ANYLOWER" ; a = ANYLOWER(x) ; output ;
func = "ANYNAME" ; a = ANYNAME(x) ; output ;
func = "ANYPRINT" ; a = ANYPRINT(x) ; output ;
func = "ANYPUNCT" ; a = ANYPUNCT(x) ; output ;
func = "ANYSPACE" ; a = ANYSPACE(x) ; output ;
func = "ANYUPPER" ; a = ANYUPPER(x) ; output ;
func = "ANYXDIGIT" ; a = ANYXDIGIT(x) ; output ;
run ;

options nocenter ;
proc print ; run ;


出力結果:
Any_func

NOTシリーズも用意されているみたいなのでまた遊んでみます。
スポンサーサイト

Posted on 2015/07/31 Fri. 01:03 [edit]

CM: 0
TB: 0

プロフィール

最新記事

最新コメント

最新トラックバック

月別アーカイブ

カテゴリ

訪れた人

▲Page top