使用 RODBC 包计算空值和缺失值(以及区分两者)时出现问题

Trouble counting null and missing values (and differentiating between the two) using RODBC package

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

Error in as.environment(pos) : no item called "22018 245 [Microsoft][ODBC SQL Server Driver][SQL Server]Conversion failed when converting the varchar value 'NA' to data type int." on the search list.

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

Error in eval(substitute(expr), data, enclos = parent.frame()) : invalid 'envir' argument of type 'character'

有什么见解吗?

test1 <- sqlQuery(通道, "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]  
</pre>

<p>