如何在SAS中提取字符串的最后4个字符
改进的格式,我有点卡住了,无法提取字符串的最后4个字符。当我写:-如何在SAS中提取字符串的最后4个字符,sas,Sas,改进的格式,我有点卡住了,无法提取字符串的最后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; 你能提供更多关
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;
你能提供更多关于变量的上下文吗?如果indikation的长度为3或小于3,我可以看到此错误,或者如果它是数字,则可能会导致问题,因为它正确地证明了数字的正确性()。如果在某些情况下它可能少于四个字符,我建议添加
max
:
indikan = substrn(indikation,max(1,length(indikation)-3),4);
我还按照Rob的建议添加了
substrn
,因为它可以更好地处理不够长的字符串。或者可以使用反向函数两次,如下所示:
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);
输出:
如果还需要返回3个字符或更少的字符串,请使用
substrn()
。另外,如果字符串为空,substrn()
将优雅地处理此问题。嗯,我没有意识到substrn如此方便-我只知道null字符串返回。我不确定我是否理解为什么它塞满了其他有趣的东西,比如更好的数字处理和自动截断,但它超级方便@RobertPenridge@乔:是的,我也是在看了这个答案后才发现的。就像SAS一样,为更有用的函数提供了不那么直观的名称=)。当我遇到substrn()
时,我实际上正在检查文档,看看常规substr()
是否会接受负值作为起始位置(它不会)。我现在肯定有一些代码要去更新了!为了更有可能得到有用的答案,请提供重现问题的样本数据。
data temp;
input trt$;
cards;
treat123
treat121
treat21
treat1
treat1
trea2
;run;
data abc;
set temp;
b=substr(trt,length(trt)-3);
run;
[Output]