我正在努力为一个由 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]