2015-10-11 109 views
2

我有一個變量NAME。我想檢查這個變量的第一個字符是否是一個小字母。 Name如下所示:如何檢查字符串的第一個字符是否是使用sas的小寫字母

aBMS 
BMS 
xMS 
zVewS 
fPP 
NBMS 

我提取使用first_letter = first(NAME);誰能教我怎麼檢查變量first_letter是否是小寫字母或不是我的變量的第一個字符。現在我做了如下,但我想知道如果我能夠實現這一點,而不輸入整個字母。 if first_letter = 'a' | first_letter = 'b' |first_letter = 'c' ... then dummy = 1

+0

我對sas不熟悉,但在其他語言中,您可以按照'if first_letter> ='a'&& first_letter <='z''的方式做一些事情。 – klog

回答

2

Perl的正則表達式還可以提供一種替代方案:

data have; 
    input NAME $; 
cards; 
aBMS 
BMS 
xMS 
zVewS 
fPP 
NBMS 
; 
run; 


data want; 
set have; 
if prxmatch('/^[[:lower:]]/', name)>0; 
run; 

這是非常簡單的,從字面上檢查,如果第一個字母是下案件。 ^定義字符串的開頭,[[:lower:]]用於匹配小寫字符。

0

SAS proc sql是大小寫敏感的,所以下面應該工作:

proc sql; 
    select t.* 
    from t 
    where substring(t.name from 1 for 1) between 'a' and 'z'; 
+1

我不認爲'proc sql'在這方面是特別的 - 就我所知,* SAS中的所有*字符串比較都區分大小寫。 – user667489

+0

當你擁有像ø這樣的角色時會發生什麼?我不相信這是行得通的。 –

+1

@data_null_。 。 。問題中的字符都是基本的ASCII字符(這對於SAS字符串來說並不罕見),並且OP提到「輸入整個字母」。如果OP要擴展字符,他/她應該提及這一點。我不知道這是否是你,但一個downvote(因爲這個原因)看起來粗魯的問題。 –

2

第一(串)EQ lowcase(第一(串))

這也將真正是如果在第一個字符字符串不是字母字符。你不會提及是否要考慮這種情況。

3

使用compress功能與kl作爲第三個參數告訴SAS只保留小寫字符,所以下面的工作正常的所有情況,包括非字母數字字符第一:

data have; 
    input NAME $; 
cards; 
aBMS 
BMS 
xMS 
zVewS 
fPP 
NBMS 
; 
run; 

data want; 
    set have; 
    FLAG = compress(first(NAME),,'lk') ne ''; 
run; 

注: compress的第三個參數是僅在版本9.1中添加到SAS的功能,因此這在早期版本的SAS中不起作用。

此外,這將適用於where子句和if語句中的數據步驟 - 相比之下,Gordon答案中使用的between語法僅在where子句中有效。這種做法會在兩種情況下工作的一個變體是:

data want; 
    set have; 
    /*Yes, SAS supports character inequalities!*/ 
    FLAG = 'a' <= first(NAME) <= 'z'; 
run; 
相關問題