sql - 如何使用PROC SQL查找数值变量的长度

标签 sql sas numerical 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;  

您是正确的方法,如果您想计算位数,则必须将其转换为 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/

    相关文章:

    perl - 按数值对文件名排序

    sql - 为什么 Postgres 忽略我在条件连接上的所有索引?

    mysql - 如何从两个表中获取特定用户的总和?

    sas - 计算 2 个 SAS 日期时间值之间的毫秒差

    parameters - 如何定义具有不同数量参数的函数?

    excel - 导入数值列中包含无效字符的数据

    algorithm - 数值优化和最小化

    sql - 在配置文件中存储 SQL 查询?

    java - TRIM 取代 LTRIM/RTRIM

    java - 对数组项进行数字编号