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

时间:2016-07-06 17:07:10

标签: sql r rodbc

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

test1< - sqlQuery(channel,“

ElectricResistance

“)

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

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

1 个答案:

答案 0 :(得分:0)

CASE汇总中的当前Count语句将填充10两者都将被视为Count聚合,因此您获得的数量相同总计。

归零是一个将在Count汇总中计算的值,因此默认ELSE语句中删除CASE语句中的NULL部分将填充非匹配条件在COUNT汇总

中计算/考虑
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]