LENGTHN SAS SUBSTR

【SAS】SUBSTR関数を使って右から文字列を切り取る方法について解説【LENGTHN】

投稿日:

今回はSUBSTR関数を使って右から文字列を切り取る方法について解説します。

(参考:【SAS】SUBSTR関数は文字列から指定した文字数分切り取る。 | ビジネスイッチ (how-to-business.com)

何故、こんなことをしようと思ったか、についてですが、

当ブログの検索クエリで「substr 右から」の流入が一定数あったので、

扱うことにしました。

SUBSTRは左から「開始位置」と「切り取る文字数」を指定する動きしかできないため、

通常では右から読み取ることはできないです。

そのため、計算式によって読み替えを行います。

(人間的には「右から」ですが、SUBSTR関数が解釈できるように「左から」読み取っても結果が同じになるように、計算式を立てます。)

右から読み取って「cde」になるのを、左から読み取って「cde」になっても結果は同じという理屈です。


/* 1 */
data data1;
 id1="abcde"; id2="abcde"; id3="abcde";
   output;
run;

data data2; set data1;
 n1 = 1;  /*末尾から何文字目を開始位置にするか*/
 n2 = 3;  /*何文字分取りたいか(先頭に向かって)*/
 id4 = lengthn(id1);
 id5 = id4-(n1+n2-1)+1;
 id6 = n2;
 id7 = substr(id1,id5,id6);
run;
  • substr(カラム, 開始位置, 文字数)(参考:【SAS】SUBSTR関数は文字列から指定した文字数分切り取る。 | ビジネスイッチ (how-to-business.com)
  • id5 = id4-(n1+n2-1)+1;・・・id4-(n1+n2)によって、文字列の長さから右からの開始位置、切り取る長さを間引くことで左から何文字目なのか表現(-1や+1は植木算の調整用)
  • id6 = n2;・・・右から3文字なのか、左から3文字なのかはいずれにしろ3文字のため、ここは通常の使い方と変わらず。
  • 右から開始位置1、3文字分の「cde」が取れた。(実際には、左から開始位置3、3文字分切り取った。)

/* 2 */
data data1;
 id1="abcde"; id2="abcde"; id3="abcde";
   output;
run;

data data2; set data1;
 n1 = 2;  /*末尾から何文字目を開始位置にするか*/
 n2 = 4;  /*何文字分取りたいか(先頭に向かって)*/
 id4 = lengthn(id1);
 id5 = id4-(n1+n2-1)+1;
 id6 = n2;
 id7 = substr(id1,id5,id6);
run;

  • substr(カラム, 開始位置, 文字数)(参考:【SAS】SUBSTR関数は文字列から指定した文字数分切り取る。 | ビジネスイッチ (how-to-business.com)
  • id5 = id4-(n1+n2-1)+1;・・・id4-(n1+n2)によって、文字列の長さから右からの開始位置、切り取る長さを間引くことで左から何文字目なのか表現(-1や+1は植木算の調整用)
  • id6 = n2;・・・右から4文字なのか、左から4文字なのかはいずれにしろ4文字のため、ここは通常の使い方と変わらず。
  • 右から開始位置2、4文字分の「abcd」が取れた。(実際には、左から開始位置1、4文字分切り取った。)

/* 3 */
data data1;
 id1="abcde"; id2="abcde"; id3="abcde";
   output;
run;

data data2; set data1;
 n1 = 3;  /*末尾から何文字目を開始位置にするか*/
 n2 = 2;  /*何文字分取りたいか(先頭に向かって)*/
 id4 = lengthn(id1);
 id5 = id4-(n1+n2-1)+1;
 id6 = n2;
 id7 = substr(id1,id5,id6);
run;
  • substr(カラム, 開始位置, 文字数)(参考:【SAS】SUBSTR関数は文字列から指定した文字数分切り取る。 | ビジネスイッチ (how-to-business.com)
  • id5 = id4-(n1+n2-1)+1;・・・id4-(n1+n2)によって、文字列の長さから右からの開始位置、切り取る長さを間引くことで左から何文字目なのか表現(-1や+1は植木算の調整用)
  • id6 = n2;・・・右から2文字なのか、左から2文字なのかはいずれにしろ2文字のため、ここは通常の使い方と変わらず。
  • 右から開始位置3、2文字分の「bc」が取れた。(実際には、左から開始位置2、2文字分切り取った。)

-LENGTHN, SAS, SUBSTR

執筆者:


comment

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

関連記事

【SAS】DATASETSプロシージャを使ってデータセットを削除する。その2【KILL】

今回はDATASETSプロシージャを使ってデータセットを削除する方法の続きを解説していきます。(前回の参考:【SAS】DATASETSプロシージャを使ってデータセットを削除する。【DELETE】 | …

【SAS】PUTはSAS日付値をフォーマットを変換して表示する【DATE】【YYMMDD】【DATETIME】【TIME】【TOD】

今回もPUTについて解説します。  前回、PUTは数値型⇒文字型への変換ができると解説しました。(参考:【SAS】PUTは数値型を文字型に変換する | ビジネスイッチ (how-to-bus …

【SAS】KEEPはカラムの選択に使える。

今回はKEEPについて解説していきたいと思います。 DROPと対になる感じで、 DROPが指定したカラムを捨てるのに対し、KEEPは指定したカラムのみ残す動きを取ります。 (参考「DROP」:【SAS …

【SAS】”dはDATE9形式(ddMONyyyy)をSAS日付に変換する。

”dについては、過去の記事でも触れています。 【SAS】SASで日付を扱う(年月日)【”d】 【YEAR()】【MONTH()】【DAY()】【MDY()】 | ビジネスイッチ (how- …

【SAS】NODUPはソート時に全ての変数における重複を削除する

今回はNODUPについて解説します。 前回NODUPKEYについて解説しました。 【SAS】NODUPKEYはソート時に重複を削除する 今回のNODUPは前回の文法の亜種という感じです。 /*nodu …