将两个数据集连接到具有不同字符长度的变量上

时间:2019-06-20 01:45:46

标签: sas

我正在尝试使用以下代码将两个数据集连接到一个具有不同字符长度的变量上,但都不起作用,我不确定为什么。

 FROM A   AS ROLLACT
    LEFT JOIN MALT.CUST            AS ACCOUNT   

    /*    ON  (ROLLACT.ACCTNO, BEST.)  = INPUT( ACCOUNT.ACCT_NO,BEST.) */
          ON  INPUT (ROLLACT.ACCTNO, 30.)  = INPUT( ACCOUNT.ACCT_NO,30.)

在这种情况下,ROLLACT.ACCTNO是长度为30的字符变量,而ACCT_NO是长度为19的字符变量。

所以我很困惑为什么不能使用以下方法将两者都转换为特定长度(使用Input(30。)):

ON  INPUT (ROLLACT.ACCTNO, 30.)  = INPUT( ACCOUNT.ACCT_NO,30.)

我也在尝试将它们都转换为数字:

 ON  (ROLLACT.ACCTNO, BEST.)  = INPUT( ACCOUNT.ACCT_NO,BEST.)

有人对在Proc Sql步骤中如何执行此操作有建议吗?

2 个答案:

答案 0 :(得分:1)

您无需执行任何特殊操作即可比较不同长度的字符串。 SAS将忽略尾随空格。显然,如果较长变量的实际值超过19个字符,则它将永远不会与限制为19个字符的值匹配。

INPUT()函数不会更改长度。 If用于将字符串转换为值。如果像示例中那样使用数字格式,则结果是数字。但是您不能将30位数字的字符串完全转换为数字。 SAS将数字存储为8字节浮点值,因此精度的最大十进制数字为15。

答案 1 :(得分:0)

一个简单的substr就能解决问题:ON (SUBSTR(ROLLACT.ACCTNO, 1,19)) = ACCOUNT.ACCT_NO