我有一个包含电话号码列的数据集。我想使用 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;
您是正确的方法,如果您想计算位数,则必须将其转换为
char
,执行以下步骤:numeric
phonenum 转换为 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;
此外,您可以使用 datasteps(SAS) 实现相同的效果,如下所示:
data _null_;
set test;
phonelen=length(compress(input(phonenum,$32.)));
if phonelen > 6;
put phonelen=;
run;
关于sql - 如何使用PROC SQL查找数值变量的长度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28864703/