SAS编程:如何获取字符串中最后一个字符?

2021-12-10  本文已影响0人  野藤_

最近生成一个ADaM的PARAM/PARAMCD遇到了一点问题。

对于Param系列变量的生成,一般我们在会提前在ADaM_VLM Spec中提前设置好每一个SDTM中--TESTCD对应的Param等变量,直接Spec导入SAS数据集,与整理好的数据以--TESTCD为关键变量,拼接获取Param变量。

Spec都是提前根据DM提供的数据说明写好的,我们发现,这一次数据有几个检测缩写与说明上不同,主要是CD值得后缀数字不同。由于我们一个Product的项目共用一个SPEC,所以,不方便直接修改为一个项目直接修改SPEC。我们需要手动根据--TETCD的最后一个数字进行判断。于是,接下来的问题就是如何获取字符变量最后一个字符值。

SUBSTR

提取字符变量中的部分字符,需要用到SUBSTR函数,这个函数有3个参数:SUBSTR(string, position, <,length>)

  1. string: 指定具体的字符内容,可以是字符串、字符变量或字符表达式,值不能为空。
  2. position: 指定截取开始的位置,取值为正整数,且值不能超过字符的最大长度,值不能为空。
  3. length: 指定截取的长度;这个变量为空时,会提取从position开始到末尾的字符;变量值为0、负值或大于字符剩余长度时,SAS Log会报错。

如何提取最后一个字符?

方法1

假设字符串为ABCD,提取最后一位字符只需要从第4位开始,提取一位就可以实现。SAS代码如下:

data tmp1;
  a = "ABCD";
  b = substr(a, 4, 1);
run;

但是实际应用时有个问题,我们无法提前确定好字符串的长度,这也就无法确定提取开始的位置。这时候需要使用LENGTH函数来提供字符变量的长度,这个长度也就是最后一个字符的位置,这样就可以提取未知长度的字符值的最后一个字符。

data tmp2;
  a = "ABCD";
  b = substr(a, length(a), 1);
run;

这个方法,还可以延伸,例如,提取字符值的最后2个字符,起始位置就可以设置为length(a)-1;提取最后3个字符,起始位置就是length(a)-2……以此类推,提取最后n个字符,起始位置就是length(a)-(n-1)

方法2

字符值的最后一个字符,等价于字符值翻转之后第一个字符。将字符值翻转后,之前最后一个字符就排在第一位,就不需要救助字符值长度来确定字符位置。实现字符串翻转的函数的是reverse

data tmp3;
  a = "ABCD";
  b =substr(reverse(a), 1, 1);
run;

以上就是SAS中获取字符串中最后一个字符的2种方法。

感谢阅读!若有疑问,欢迎评论区交流!

上一篇下一篇

猜你喜欢

热点阅读