使用 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()) 中的错误:类型为"字符"的无效"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)

我相信您的列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]  

最新更新