SAS变量没有类型

时间:2014-12-30 18:48:23

标签: types sas

我有一个数据库,我通过SAS EG 5.1程序中的PROC SQL步骤导入

最初我用来执行此操作的代码如下:

CREATE TABLE WORK.TABLE AS 
     SELECT * FROM connection to some_source (
     SELECT *
     FROM some_table
     WHERE LOGIN_ID IN (SELECT ID FROM WORK.ID_List);;

这会产生错误:"使用IN的表达式具有不同数据类型的组件。"

这些都应该是数字的(我知道 ID是数字的)但我假设LOGIN_ID必须表示为字符并解析为将其转换为数字步。我摸索了谷歌一段时间试图找到一种方法来做到这一点,直到一位同事告诉我在这一步中无法完成,除非我列出所有40列并使用AS,这将是最后一个采取。我不确定他是否正确。

所以我删除了WHERE子句以查看数据。一切看起来都很好,LOGIN_ID看起来确实很数字,所以我尝试使用VTYPE来检查它的类型。我得到的是一列空值(点)。再次,谷歌在这里没有帮助。

那么,这些数字怎么没有类型呢?此外,非常感谢有关如何解决原始问题的任何想法!

1 个答案:

答案 0 :(得分:2)

你可以试试这个:

create table work.table as
select a.*
from connection to some_source (
    select *
    from some_table
) as a
inner join work.id_list as b
on cats(a.login_id) = cats(b.id);

传递给连接的SQL查询必须在主机数据库系统中有效,因此避免在该查询中引用SAS表是个好主意。要获得您希望使用in运算符的结果,您可以在SAS数据集上inner join

cats()函数盲目地将其参数转换为字符串,并删除并引导和尾随空格。因此,如果login_idid的类型不同,这将确保它们仍然可以正确匹配。请注意,缺少的数字值将变为".",缺少的字符值将变为"",因此您最好知道在您加入的任一列中是否缺少值

如果要显式更改连接查询中的类型,则只需列出所有列而不是使用select *。上面的方法将避免这样做。