在日常的工作中,经常需要读取字符串的最后一个字符。举一个典型的例子Codelist="000001_SZ 600000_SH 300001_SZ",这里字符串中的每个字符以空格隔开。期望取出300001_SZ。下面介绍三种常用的方法。
/*最简单的方法:运用scan 函数 scan(Codelist,-1,' '),这里-1指的是从后往回取*/
data _null_;
Codelist="000001_SZ 600000_SH 300001_SZ";
length Lastword $10.;
Lastword = scan(Codelist,-1,' ');
put Lastword=;
run;
/*最扯蛋的方法:如果你觉得 -1 用的比较别扭 reverse+scan reverse的功能在于将字符颠倒比如 将code颠倒成edoc*/
data _null_;
Codelist="000001_SZ 600000_SH 300001_SZ";
length Lastword $10.;
Lastword=reverse(scan(reverse(Codelist),1,' '));
put Lastword=;
run;
/*最装逼的方法:运用do until+scan*/
data _null_;
Codelist="000001_SZ 600000_SH 300001_SZ";
i=0;
length Lastword $10.;
if(Codelist >' ')then do;
do until(Lastword=' ');
i+1;
Lastword=scan(Codelist,i,' ');
end;
Lastword=scan(Codelist,i-1,' ');
put Lastword=;
end;
run;
do until(expression);
/* 程序块*/
end;
/*这里需要注意的是 do until的用法,do循环至少被执行一次,也就是说,先执行程序块的内容再执行expression。*/
当然你还可以通过上述方法读取 第N个字符,以及将上述方法写成宏的形式,灵活运用。
另外本人开一个微信公众号,监督自己以及与大家分享SAS学习和投资心得,欢迎扫码,或者搜索 SAS与量化投资,关注