当前位置: 首页 > 知识库问答 >
问题:

使用RODBC包计数空值和丢失值

笪健
2023-03-14

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

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] 

“)

共有1个答案

谢阳曜
2023-03-14

您在count聚合中的当前case语句将填充10,这两个语句都将在count聚合中考虑,因此您得到的计数与总计相同。

零是将在count聚合中计数的值,因此在case语句中默认删除else部分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] 

或者使用聚合而不是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] 
 类似资料:
  • 为什么在使用SQLSave保存到ms sql时,RODBC会丢失我的数字列的精度? 在R中,我用一个数值列创建了下面的dataframe。它们可能看起来已经四舍五入了,但这是一个印刷问题,它们不是四舍五入的。 将其保存到数据库中,似乎表明丢失了某些精度: Date类列会导致float类型的ms sql列,从而导致存储不正确的值: 日期被解释为一个公式:

  • 我一直在写一个程序,它使用UDP上的停止和等待协议通过局域网和广域网发送数据包。我最近一直在测试我的程序,并注意到较大的数据包(接近64k字节)的丢包率更高。直觉上这是有道理的,但实际原因是什么?

  • 我正在为一个由5个表和近10年的数据组成的SQL数据库创建一个缺失矩阵。我已经建立了ODBC连接,并且正在使用R中的RODBC包作为我的工作环境。我试图编写一个函数,该函数将输出每个表每年的行数、给定表在给定年份的空值(不存在的值)的计数和百分比以及给定表的缺失值(跳过的问题/未回答的问题)的计数和百分比。我正在使用下面的代码,试图让它在一个变量上工作,然后一旦它工作了,就把它变成一个函数。但是,

  • 我正在用c写一个抖动缓冲程序来处理rtp包。这里rtp使用UDP传输,所以连接不可靠,包会不整齐,也会有一些包丢失。如果包的顺序发生变化,我会通过序号(在rtp报头信息中)来排列,但是我怎么处理或者补偿包丢失呢?(因为包丢失不在我手上) 注意:我正在处理h264作为有效负载,他们要求我只使用RTP报头

  • 我有一个自定义的CMS系统,我已经写在PHP。我几乎完成了将所有旧的遗留mysql_函数转换为PDO。但是,我在一个文件中有大量的函数,没有类包装器。文件中只有大约50个函数,这实际上是运行CMS所需的所有函数。很多天前,我养成了这样使用全局值的坏习惯:

  • 我正在使用java,从服务器收到了一些json字符串。我收到了带有readUTF的json字符串,但是有一些数据丢失了。我没有收到每个json包的前两个字符。另一个问题是收到json字符串有延迟。例如,服务器发送了一个json字符串,客户端无法收到它,直到服务器和客户端发送的大约50个json字符串突然显示所有的json字符串。主要问题是什么? 因为服务器用UTF格式发送数据,所以我不能用Buff