如何使用sas检查字符串的第一个字符是否为小写字母

如何使用sas检查字符串的第一个字符是否为小写字母,sas,Sas,我有一个变量名称。我想检查这个变量的第一个字符是否是小写字母名称如下所示: aBMS BMS xMS zVewS fPP NBMS 我使用first\u letter=first(NAME)提取变量的第一个字符谁能教我如何检查变量第一个字母是否为小写字母。现在我是这样做的,但我想知道我是否可以在不输入整个字母表的情况下实现这一点如果第一个字母='a';第一个字母='b';第一个字母='c'。。。那么dummy=1SASproc-sql是区分大小写的,因此以下各项应该可以工作: proc sql

我有一个变量
名称
。我想检查这个变量的第一个字符是否是小写字母<代码>名称如下所示:

aBMS
BMS
xMS
zVewS
fPP
NBMS

我使用
first\u letter=first(NAME)提取变量的第一个字符
谁能教我如何检查变量
第一个字母
是否为小写字母。现在我是这样做的,但我想知道我是否可以在不输入整个字母表的情况下实现这一点<代码>如果第一个字母='a';第一个字母='b';第一个字母='c'。。。那么dummy=1

SAS
proc-sql
是区分大小写的,因此以下各项应该可以工作:

proc sql;
    select t.*
    from t
    where substring(t.name from 1 for 1) between 'a' and 'z';
第一个(字符串)均衡器小写(第一个(字符串))


如果字符串中的第一个字符不是字母字符,则也是如此。你没有提到是否要考虑这种情况

使用
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子句和data step if语句中都有效-相比之下,Gordon答案中使用的
between
语法仅在where子句中有效。在这两种情况下都适用的一种方法是:

data want;
    set have;
    /*Yes, SAS supports character inequalities!*/
    FLAG = 'a' <= first(NAME) <= 'z';
run;
需要数据;
集有;
/*是的,SAS支持字符不平等*/

FLAG='a'Perl正则表达式还可以提供一种替代方法:

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


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

这是非常简单的,逐字检查第一个字母是否为小写。^要定义字符串的开头,[[:lower:]是匹配小写字符。

我不熟悉sas,但是在其他语言中,如果first_letter>='a'&&first_letter,您可以按照
的思路做一些事情,我认为
proc-sql
在这方面并不特别-据我所知,SAS中的所有字符串比较都是区分大小写的。当您使用像ø这样的字符时会发生什么?我认为这行不通。@data\u null\u。问题中的字符都是基本的ASCII字符(这对于SAS字符串来说并不少见),OP提到“键入整个字母表”。如果OP需要扩展字符,他/她应该提到这一点。我不知道是不是你,但鉴于这个问题,投反对票(出于这个原因)似乎是不礼貌的。