she*_*ode 4 sql numerical sas string-length proc-sql
我有一个带有一列电话号码的数据集.我想使用PROC SQL过滤此数据集WHERE,数字的长度至少为 7位数.
在普通的SQL中,我可以在数字周围应用长度函数,但它可以工作,但是在SAS中它不允许我将它应用于数字列.
我的第一直觉是将列转换为字符,然后找到它的长度,但我只能在使用该put函数时声明一个大小.但是,我甚至不知道我的数字的最大尺寸,因为我无法计算长度!
如何使用PROC SQL在SAS中找到数值的长度?
由于您尚未发布样本数据集,因此我为自己创建了一个样本数据集
创建样本数据集.以phonenum如numeric在你的情况一样.
data test;
infile datalines;
input phonenum : 8.;
datalines;
123
1234
12345
123456
1234567
12345678
123456789
12345678910
;
run;
Run Code Online (Sandbox Code Playgroud)
你是正确的方法,如果你想计算位数,它必须转换为char,执行以下步骤:
numericphonenum 转换为char.虽然很明显,数字位数不会大于32,但如果您愿意,还可以增加计数.compress功能strip关闭空白字符length函数计算位数proc sql\SAS不能使用在新创建的变量where就是这样的语句,但是proc sql允许你这样做,使用calculated关键字这种类型的变量之前.proc sql;
select length(compress(put(phonenum,32.))) as phonelen from test where calculated phonelen > 6;
quit;
Run Code Online (Sandbox Code Playgroud)
此外,您可以使用datasteps(SAS)实现相同的功能,如下所示:
data _null_;
set test;
phonelen=length(compress(input(phonenum,$32.)));
if phonelen > 6;
put phonelen=;
run;
Run Code Online (Sandbox Code Playgroud)