我有一个变量NAME
。我想检查这个变量的第一个字符是否是一个小写字母。 Name
如下所示:
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 :(得分: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;
N.B。 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;
答案 1 :(得分:2)
first(string)eq lowcase(first(string))
如果字符串中的第一个字符不是字母字符,也是如此。您没有提及是否要考虑这种情况。
答案 2 :(得分:2)
Perl Regular Expression也可以提供另一种选择:
data have;
input NAME $;
cards;
aBMS
BMS
xMS
zVewS
fPP
NBMS
;
run;
data want;
set have;
if prxmatch('/^[[:lower:]]/', name)>0;
run;
这非常简单,从字面上检查第一个字母是否是小写字母。 ^要定义字符串的开头,[[:lower:]]将匹配小写字符。
答案 3 :(得分:0)
SAS proc sql
区分大小写,因此以下内容应该有效:
proc sql;
select t.*
from t
where substring(t.name from 1 for 1) between 'a' and 'z';