ラベル 関数: UPCASE の投稿を表示しています。 すべての投稿を表示
ラベル 関数: UPCASE の投稿を表示しています。 すべての投稿を表示

2018年9月26日水曜日

2つの文字を大文字・小文字区別せずに比較する





クマのプーさんの実写映画のやつ観に行ってきました。
プーさんが異常に可愛かったです。あとプーさんってぬいぐるみ設定だったんですね、知らなかった。。




プーさんの話は置いといて、
タイトルの通り、2つの文字を大文字・小文字区別せずに比較する方法を紹介したいと思います。


サンプルデータ

data test;
input a:$10. b:$10.;
cards;
pooh POOH
honey hunny
;



大文字・小文字区別せずに比較する

data out1;
  set test;

  /* 比較する文字がシングルバイト文字のみの場合 */
  if compare(a,b,'i') = 0 then same_flg1=1;

  /* 比較する文字に日本語等マルチバイト文字を含む場合 */
  if kcompare(a,b,'i') = 0 then same_flg2=1;

run;





COMPARE( 対象変数1, 対象変数2, 'i' )」というように、3つめの引数に「'i'」と指定することで大文字・小文字区別せずに比較することができます。
戻り値が「0」なら一致してるということです。

「COMPARE関数」は日本語等のマルチバイト文字に対応していないので、マルチバイトを含む場合は「KCOMPARE関数」を使用します。



2015年10月20日火曜日

大文字や小文字に変換する関数


  • 半角文字 → 文字に変換 ・・・ UPCASE関数
  • 半角文字 → 文字に変換 ・・・ LOWCASE関数





data DT1;
   length A A2 B B2 $10.;
   A = "abcdefg";
   A2 = upcase(A);

   B = "ABCDEFG";
   B2 = lowcase(B);
run;


2015年10月19日月曜日

最初の1バイト目だけ大文字に変換する


たとえば「abc def」→「Abc def」のような変換です。


前提条件
・ 最初の1バイト目はアルファベットである事。
・ 対象変数は半角の英数記号のみである事。


サンプルデータ

data DT1;
   length VAL $20.;
   VAL="proc print"; output;
   VAL="data step"; output;
run;

 VAL  
  proc print  
  data step



先頭の1バイト目だけ大文字にする

data DT2;
   length VAL2 VAL3 $20.;
   set DT1;

   * ① SUBSTR関数を使う ;
   VAL2 = upcase(first(VAL)) || substr(VAL,2);

   * ② 正規表現を使う ;
   VAL3 = prxchange('s/(^[a-z])/\U$1/', 1, VAL);
run;

 VAL2  
 VAL3  
 VAL  
 Proc print Proc print  proc print 
 Data step  Data step  data step

① SUBSTR関数を使う方法
FIRST関数は1バイト目を抜き出す関数
つまり1バイト目を抜き出して大文字にしたものと、2バイト目以降の文字を結合しています。

② 正規表現を使う方法
PRXCHANGE関数で正規表現による置換をしてます。
「prxchange('s/(^[a-z])/\U$1/', 1, VAL)」

(^[a-z])」は先頭の文字がa~zのいずれかである場合、、という意味。
\U$1」は上記を大文字に変換しています。