如何使用sas

时间:2015-10-11 14:08:14

标签: sas

我有一个变量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

4 个答案:

答案 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';
相关问题