最近生成一个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>)
- string: 指定具体的字符内容,可以是字符串、字符变量或字符表达式,值不能为空。
- position: 指定截取开始的位置,取值为正整数,且值不能超过字符的最大长度,值不能为空。
- 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种方法。
感谢阅读!若有疑问,欢迎评论区交流!
网友评论