使用 RODBC 包计算空值和缺失值

Counting null and missing values using RODBC package

我正在为一个 SQL 数据库创建一个缺失矩阵,该数据库由 5 table 和将近 10 年的数据组成。我已经建立了 ODBC 连接并使用 R 中的 RODBC 包作为我的工作环境。我正在尝试编写一个函数,该函数将为每个 table 输出每年的行数,给定 table 的给定年份中空值(不存在的值)的计数和百分比,以及给定 table 的缺失值(问题 skipped/not 已回答)的计数和百分比。我写了下面的代码,试图让它在一个变量上工作,然后在它工作后把它变成一个函数。但是,当我 运行 这段代码时,总计、缺失值和空值的计数都是相同的,百分比当然是 1。我没有收到任何错误消息。我不确定问题出在哪里,区分这个项目的 missing 和 null 很重要。非常感谢任何见解。

test1 <- sqlQuery(通道, "

SELECT [event_year] AS 'YEAR', 
       Count(*)     AS 'TOTAL', 
       Count(CASE 
               WHEN mother_education_trendable = 'NA' THEN 1 
               ELSE 0 
             END)   AS 'NULL_VAL', 
       Count(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)

您当前在 Count 聚合中的 CASE 语句将填充 10 两者都将被考虑在 Count 聚合中,因此您得到与总数相同。

零是一个值,将被计入 Count 聚合中,因此默认情况下删除 CASE 语句中的 ELSE 部分 NULL 将填充非匹配条件COUNT 总计

中不会 counted/considered
SELECT [event_year] AS 'YEAR', 
       Count(*)     AS 'TOTAL', 
       Count(CASE 
               WHEN mother_education_trendable = 'NA' THEN 1 
             END)   AS 'NULL_VAL', 
       Count(CASE 
               WHEN mother_education_trendable = -1 THEN 1 
             END)   AS 'MISS_VAL' 
FROM   [GA_CMH].[dbo].[births] 
GROUP  BY [event_year] 
ORDER  BY [event_year] 

或使用 SUM 聚合而不是 COUNT

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]