書式設定を改善しましたが、文字列の最後の4文字を抽出できないので少し行き詰まりました。
indikan=substr(Indikation,length(Indikation)-3,4);
無効な引数を与えています。
これを行う方法?
このコードは機能します:
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 )。
場合によっては4文字未満になる可能性がある場合は、max
を追加することをお勧めします。
indikan = substrn(indikation,max(1,length(indikation)-3),4);
長くない文字列をより適切に処理できるとRobが示唆するように、substrn
も追加しました。
または、次のように、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;
誤った結果は末尾の空白が原因である可能性があります。そのため、substrを実行する前に、文字列を削除/トリミングします。
indikan=substr(strip(Indikation),length(strip(Indikation))-3);
最後の4文字を与える必要があります
または、このアプローチを試すこともできますが、最初は少し直感的ではありませんが、安定しており、短く、使用する関数が少なく、数値とテキスト値を処理します。
indikan = prxchange("s/.*(.{4}$)/$1/",1,indikation);