BookmarkSubscribeRSS Feed
🔒 This topic is solved and locked. Need further help from the community? Please sign in and ask a new question.
sasone
Quartz | Level 8

ワードパターンの前方一致の探し方は判りました。
余りスマートな方法ではありませんが中間一致も探せました。
後方一致はデータステップでどのように見つければよろしいのでしょうか?
2行目のレコードにのみ1を立てられれば正解なのですが。

data co;
  coval='200%上昇'; output;
  coval='100%'; output;
  coval='%100'; output;
  coval='200%'; output;
run;
data adco; 
  set co;
  if coval=:'%' then anl01fn=1; *前方一致;
  if index(coval,'%')>0 then anl02fn=1; *中間一致;
run;

 

ご教示のほど、よろしくお願いいたします。

1 ACCEPTED SOLUTION

Accepted Solutions
yu_sas
SAS Employee

コミュニティのご活用ありがとうございます。

蛇足ですが、KREVERSE関数を使って前方一致に帰着させるのもいいかなと思いました。

 

  if left(kreverse(coval))=:'%' then anl03fn=1;

View solution in original post

4 REPLIES 4
amatsu
Obsidian | Level 7

(2021/12/23追記)

以下、最初に回答した方法について、

変数covalに「50%~100%」のような値が想定される場合(検索対象の文字が複数出現する場合)は、後方一致ができないので、そのような値が想定される場合はyu_sasさんがご回答いただいている方法をご利用いただければと思います。

 

--- 以下、最初の回答 --------------------------------------------

こんにちは。

以下でどうでしょうか(これまたスマートではないかもしれませんが。。)

 

  if coval^='' and kindex(coval,'%') = klength(coval) then anl02fn=1;

ちなみに変数値に日本語を含んでいたので、マルチバイト用のkindex、klength関数を使用しています。

sasone
Quartz | Level 8

amatsuさま

 

早速のご回答、誠に有難うございました。
sqlを使用したくなかったので、こちらの方法で十分でございます。

yu_sas
SAS Employee

コミュニティのご活用ありがとうございます。

蛇足ですが、KREVERSE関数を使って前方一致に帰着させるのもいいかなと思いました。

 

  if left(kreverse(coval))=:'%' then anl03fn=1;
sasone
Quartz | Level 8

yu_sasさま

 

ご回答、誠に有難うございました。
こちらの方法で問題なく抽出できました。

 

KREVERSE関数は、パスの一番下のフォルダ名を取得する時など
他の手段にも応用が利きそうで便利かと思いました。