无法使用RODBC包计算空值和缺失值(并区分两者)

时间:2016-07-11 17:42:53

标签: sql r rodbc

我正在为一个由5个表和近10年的数据组成的SQL数据库创建一个缺失矩阵。我建立了ODBC连接,并使用R中的RODBC包作为我的工作环境。我正在尝试编写一个函数,它将为每个表输出每年的行数,给定表中给定年份的空值的计数和百分比(值不存在),以及丢失的计数和百分比(问题跳过/未回答)给定表的值。我正在使用下面的代码,尝试让它在一个变量上运行,然后在它运行后将其转换为函数。但是,当我运行此代码(见下文)时,它似乎无法正常工作,我认为问题在于为null,NA的字符分配一个整数值。我在尝试列出函数中的变量时收到此消息:

  

as.environment(pos)出错:没有名为“22018 245 [Microsoft] [ODBC SQL Server驱动程序] [SQL Server]的项目将varchar值'NA'转换为数据类型int时转换失败。”在搜索列表上。

此外,当我尝试查找函数的环境时,R返回NULL。我不一定要为已经存在的变量分配新值,而且我是SQL的新手,但我想尝试沿着这些行If X = 'NA'然后Y = 1其他0做一些事情。当我尝试运行最后2行创建百分比变量时,我收到以下错误消息:

  

eval中的错误(substitute(expr),data,enclos = parent.frame()):'character'类型的'envir'参数无效

有什么见解?

test1< - sqlQuery(channel,“select

              [EVENT_YEAR] AS 'YEAR', 
              COUNT(*) AS 'TOTAL',
              SUM(CASE WHEN MOTHER_EDUCATION_TRENDABLE = 'NA' THEN 1 ELSE 0 END) AS 'NULL_VAL',
              SUM(CASE WHEN MOTHER_EDUCATION_TRENDABLE = -1 THEN 1 ELSE 0 END) AS 'MISS_VAL'

              from [GA_CMH].[dbo].[BIRTHS]

              GROUP BY [EVENT_YEAR]
              ORDER BY [EVENT_YEAR]")

              test1$nullpct<-with(test1, NULL_VAL/TOTAL)
              test1$misspct<-with(test1, MISS_VAL/TOTAL)

1 个答案:

答案 0 :(得分:0)

我相信您的MOTHER_EDUCATION_TRENDABLE列的数据类型是一个整数,如果是这样,请尝试:


    select
    [EVENT_YEAR] AS 'YEAR',
    COUNT(*) AS 'TOTAL',
    SUM(CASE WHEN MOTHER_EDUCATION_TRENDABLE IS NULL THEN 1 ELSE 0 END) AS 'NULL_VAL', 
    SUM(CASE WHEN MOTHER_EDUCATION_TRENDABLE = -1 THEN 1 ELSE 0 END) AS 'MISS_VAL'
    from [GA_CMH].[dbo].[BIRTHS]
    GROUP BY [EVENT_YEAR]
    ORDER BY [EVENT_YEAR]