Sas 检查单元格是否包含非字母字符

Sas 检查单元格是否包含非字母字符,sas,Sas,如果变量包含非Alpha字符,我将查找函数 我找到了函数 诺塔法 data test; set final_step1; f_test = notalpha(first_name); l_test = notalpha(last_name); keep emplid first_name last_name f_test l_test; run; 但它是这样显示的 Last_name Abate f_test John 4 它应该显示0 notalpha%%;应该显

如果变量包含非Alpha字符,我将查找函数

我找到了函数

诺塔法

data test;
set final_step1;
f_test = notalpha(first_name);
l_test = notalpha(last_name);
keep emplid first_name last_name f_test l_test;
run;
但它是这样显示的

Last_name Abate  f_test
John             4
它应该显示0

notalpha%%;应该显示来自的1


是否有任何函数在SAS上发现非字母值,或者我在代码上出错?

为此,您可以参考任何Alpha函数,请参阅下面的代码:

data have;
input name $10.;
anyalp=anyalpha(name);
if anyalp=0 then notalpha=1;
else if anyalp>0 then notalpha=0;
drop anyalp;
datalines;
%%%%%
01233
abcdef
@bc
abc123
;
run;

proc print data=have; run;
文档:

我会使用

lengthn(compress(first_name,".",'a'))
压缩删除所有字母字符。如果结果字符串的长度大于零,则它包含非字母字符。

使用TRIMN函数删除尾随空格,并在名称为空时返回长度为0的字符串(如有必要)

pos_notalpha = notalpha ( TRIMN ( name )) ;
如果也有前导空格,请使用STRIP

来自帮助

NOTALPHA函数

在字符串中搜索非字母字符,并返回 找到字符的第一个位置

TRIMN函数

从字符表达式中删除尾随空格,并返回 如果缺少表达式,则返回长度为零的字符串

带函数

返回删除了所有前导空格和尾随空格的字符串。 … STRIP函数返回带所有前导和尾随的参数 删除空白。如果参数为空,STRIP将返回一个带有 长度为零


这看起来不对。约翰的第四个角色是阿尔法角色。但它后面的空间不是阿尔法。所以结果应该是5,而不是4。显著性并不明显,但它是有效的。循环压缩必须始终扫描所有字符,notalpha可以在第一个失败字符处停止,但函数嵌套可能会消除这一可笑的小差异。,可以替换为无参数双逗号,,
leftedpos_notalpha = notalpha ( STRIP ( name )) ;