最近生成一個ADaM的PARAM/PARAMCD遇到了一點問題摇肌。
對于Param系列變量的生成擂红,一般我們在會提前在ADaM_VLM Spec中提前設置好每一個SDTM中--TESTCD對應的Param等變量,直接Spec導入SAS數(shù)據(jù)集围小,與整理好的數(shù)據(jù)以--TESTCD為關(guān)鍵變量昵骤,拼接獲取Param變量树碱。
Spec都是提前根據(jù)DM提供的數(shù)據(jù)說明寫好的,我們發(fā)現(xiàn)变秦,這一次數(shù)據(jù)有幾個檢測縮寫與說明上不同成榜,主要是CD值得后綴數(shù)字不同。由于我們一個Product的項目共用一個SPEC蹦玫,所以赎婚,不方便直接修改為一個項目直接修改SPEC。我們需要手動根據(jù)--TETCD的最后一個數(shù)字進行判斷樱溉。于是挣输,接下來的問題就是如何獲取字符變量最后一個字符值。
SUBSTR
提取字符變量中的部分字符福贞,需要用到SUBSTR函數(shù)歧焦,這個函數(shù)有3個參數(shù):SUBSTR(string, position, <,length>)
- string: 指定具體的字符內(nèi)容,可以是字符串肚医、字符變量或字符表達式绢馍,值不能為空。
- position: 指定截取開始的位置肠套,取值為正整數(shù)舰涌,且值不能超過字符的最大長度,值不能為空你稚。
- length: 指定截取的長度瓷耙;這個變量為空時,會提取從position開始到末尾的字符刁赖;變量值為0搁痛、負值或大于字符剩余長度時,SAS Log會報錯宇弛。
如何提取最后一個字符鸡典?
方法1
假設字符串為ABCD
,提取最后一位字符只需要從第4位開始枪芒,提取一位就可以實現(xiàn)彻况。SAS代碼如下:
data tmp1;
a = "ABCD";
b = substr(a, 4, 1);
run;
但是實際應用時有個問題,我們無法提前確定好字符串的長度舅踪,這也就無法確定提取開始的位置纽甘。這時候需要使用LENGTH
函數(shù)來提供字符變量的長度,這個長度也就是最后一個字符的位置抽碌,這樣就可以提取未知長度的字符值的最后一個字符悍赢。
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
字符值的最后一個字符,等價于字符值翻轉(zhuǎn)之后第一個字符裳扯。將字符值翻轉(zhuǎn)后抛丽,之前最后一個字符就排在第一位,就不需要救助字符值長度來確定字符位置饰豺。實現(xiàn)字符串翻轉(zhuǎn)的函數(shù)的是reverse
亿鲜。
data tmp3;
a = "ABCD";
b =substr(reverse(a), 1, 1);
run;
以上就是SAS中獲取字符串中最后一個字符的2種方法。
感謝閱讀冤吨!若有疑問蒿柳,歡迎評論區(qū)交流!