web-dev-qa-db-ja.com

SAS内の文字列の最後の4文字を抽出する方法

書式設定を改善しましたが、文字列の最後の4文字を抽出できないので少し行き詰まりました。

indikan=substr(Indikation,length(Indikation)-3,4);

無効な引数を与えています。
これを行う方法?

5
user3658367

このコードは機能します:

data temp;
indikation = "Idontknow";
run;

data temp;
set temp;
indikan = substrn(indikation,max(1,length(indikation)-3),4);
run;

変数についてより多くのコンテキストを提供できますか?表示が長さ3以下の場合、このエラーが表示されるか、数値である場合は、数値を正当化するため問題が発生する可能性があります( http://support.sas.com/documentation/cdl/en/lrdict /64316/HTML/default/viewer.htm#a000245907.htm )。

5
JJFord3

場合によっては4文字未満になる可能性がある場合は、maxを追加することをお勧めします。

indikan = substrn(indikation,max(1,length(indikation)-3),4);

長くない文字列をより適切に処理できるとRobが示唆するように、substrnも追加しました。

2
Joe

または、次のように、reverse関数を2回使用することもできます。

data _null_;

   my_string = "Fri Apr 22 13:52:55 +0000 2016";

   _day   = substr(my_string, 9, 2);
   _month = lowcase(substr(my_string, 5, 3));

   * Check the _year out;
   _year  = reverse(substr(reverse(trim(my_string)), 1, 4));

   created_at = input(compress(_day || _month || _year), date9.);

   put my_string=;
   put created_at=weekdatx29.;
run;
1
Rio Pugliese

誤った結果は末尾の空白が原因である可能性があります。そのため、substrを実行する前に、文字列を削除/トリミングします。

indikan=substr(strip(Indikation),length(strip(Indikation))-3);

最後の4文字を与える必要があります

0
Gabit Kemelov

または、このアプローチを試すこともできますが、最初は少し直感的ではありませんが、安定しており、短く、使用する関数が少なく、数値とテキスト値を処理します。

indikan = prxchange("s/.*(.{4}$)/$1/",1,indikation);
0
Willwillpower