首页 > 解决方案 > 如何选择一定长度的数值数据

问题描述

我正在尝试选择大于 5 个字节的数字数据。我输入了以下内容,但收到错误错误:函数长度需要字符表达式作为参数 1。不确定我做错了什么。任何帮助将不胜感激。

29         PROC SQL;
30            CREATE TABLE WORK.FILTER_FOR_FDRMASTER_DAILY__0000 AS
31            SELECT t1.Account_id_nr,
32                   t1.Predecessor_CC_SK,
33                   t1.Successor_CC_SK,
34                   t1.Related_CC_SK,
35                   t1.Original_CC_SK,
36                   t1.Predecessor_Argt_SK,
37                   t1.Successor_Argt_SK,
38                   t1.Predecessor_OK,
39                   t1.Successor_OK,
40                   t1.CHD_SSR_IN,
41                   t1.CHD_SYSTEM_BANK,
42                   t1.USAANR
43               FROM WORK.FILTER_FOR_FDRMASTER_DAILY_2 t1
44               WHERE t1.Successor_CC_SK NOT = . AND t1.CHD_SSR_IN = 'Y' AND t1.CHD_SYSTEM_BANK NOT BETWEEN '867700000100' AND
45                    '867700009500' AND LENGTH(t1.Successor_CC_SK) > '5'
46               ORDER BY t1.Successor_CC_SK;

标签: sqlsas

解决方案


由于您同时处理信用卡号和 5 位数字,我们假设它们都可以以三种格式之一存储:

Num:  1234567890123456
Char: 1234-5678-9012-3456
Char: 1234 5678 9012 3456

让我们从第一种情况开始,它假设变量是数字的。您想排除所有 5 位数的值。您可以使用Rick Wicklin 的这个技巧来计算整数中的位数:

proc sql noprint;
    create table want as
         select number
         from have
         where ceil(log10(number+1)) > 5
    ;
quit;

对于第二种和第三种情况,它们将被存储为字符。countc()您可以使用该D选项计算字符串中数字字符的数量。

proc sql noprint;
    create table want as
         select compress(number, ' -')
         from have
         where countc(number,'','D') > 5
    ;
quit;

推荐阅读