今回はSUBSTR関数について解説します。
/* 正常形 */
data data1;
id1="123456789";
output;
run;
data data2; set data1;
id2 = substr(id1, 1, 5);
run;


- substr関数は設定した字数分の文字列を切り取る。substr(カラム, 開始位置, 文字数)
- 開始位置は1スタート。
/* あいうえおかきくけこ */
data data1;
id1="あいうえおかきくけこ";
output;
run;
data data2; set data1;
id2 = substr(id1, 1, 5);
run;


- substr関数は設定した字数分の文字列を切り取る。substr(カラム, 開始位置, 文字数)
- 開始位置は1スタート。
- 日本語だと表示がおかしくなる。
/* 0, 5 */
data data1;
id1="123456789";
output;
run;
data data2; set data1;
id2 = substr(id1, 0, 5);
run;


- substr関数は設定した字数分の文字列を切り取る。substr(カラム, 開始位置, 文字数)
- 開始位置は1スタート。
- 第2引数に0を設定すると正しく処理されない。
/* 12, 17 */
data data1;
id1="123456789";
output;
run;
data data2; set data1;
id2 = substr(id1, 12, 17);
run;


- substr関数は設定した字数分の文字列を切り取る。substr(カラム, 開始位置, 文字数)
- 開始位置は1スタート。
- 第2引数に最大文字数より大きな値を入れると、id2は欠損値になる。
/* 1, 12 */
data data1;
id1="123456789";
output;
run;
data data2; set data1;
id2 = substr(id1, 1, 12);
run;


- substr関数は設定した字数分の文字列を切り取る。substr(カラム, 開始位置, 文字数)
- 開始位置は1スタート。
- 第3引数が最大文字数より大きくても正しく処理される。
/* 123456789 */
data data1;
id1=123456789;
output;
run;
data data2; set data1;
id2 = substr(id1, 1, 5);
run;


- substr関数は設定した字数分の文字列を切り取る。substr(カラム, 開始位置, 文字数)
- 開始位置は1スタート。
- id1が数値型だと正しく処理されない。
/* "1", "5" */
data data1;
id1="123456789";
output;
run;
data data2; set data1;
id2 = substr(id1, "1", "5");
run;


- substr関数は設定した字数分の文字列を切り取る。substr(カラム, 開始位置, 文字数)
- 開始位置は1スタート。
- 第2引数、第3引数が文字型でも正しく表示される。
/* 1.1, 5 */
data data1;
id1="123456789";
output;
run;
data data2; set data1;
id2 = substr(id1, 1.1, 5);
run;


- substr関数は設定した字数分の文字列を切り取る。substr(カラム, 開始位置, 文字数)
- 開始位置は1スタート。
- 第2引数が1.1でも処理は通る。(1~5を取る。)