使用2个sqlquerys在R中循环
我试图通过在SQL中调用一个存储过程,运行一个回归,然后将结果放入SQL中的一个表中,从而在R中运行一个循环。存储的进程使用一个名为DiagCd的参数,如果我输入一个单独的DiagCd,它会识别它并提取相关数据。在它拉进来之后,我运行回归并插入到表中没有问题。但是,一旦我尝试对多个DiagCD运行此操作,它将无法识别正在使用的代码 我从连接到数据源开始使用2个sqlquerys在R中循环,sql,r,Sql,R,我试图通过在SQL中调用一个存储过程,运行一个回归,然后将结果放入SQL中的一个表中,从而在R中运行一个循环。存储的进程使用一个名为DiagCd的参数,如果我输入一个单独的DiagCd,它会识别它并提取相关数据。在它拉进来之后,我运行回归并插入到表中没有问题。但是,一旦我尝试对多个DiagCD运行此操作,它将无法识别正在使用的代码 我从连接到数据源开始 con <- odbcConnect("RViper", uid="jzinnel") con#设置连接 一个sqlQuery行让我困惑
con <- odbcConnect("RViper", uid="jzinnel")
con#设置连接
一个sqlQuery
行让我困惑。是不是类似于数据我不确定。这个[数据我不知道您使用的是什么sql方言,但在编写过程中,MDIAGD将作为未知实体传递。使用sprintf likedata尝试您的建议时,它不喜欢%d并给出了其他建议,但当我找到一个有效的建议时,它确实通过了循环,但没有给出其中的所有信息。是否尝试尝试使用它有一点。@mlt谢谢你的帮助。结果是[data]
codes <- sqlQuery(con,"select distinct diagcd from Table where DiagPosition = 1")
for (i in 1:4)
{
# Get DiagCd to for this iteration
mDiagCd <- codes[i]
# Get Data to run Regression on
data<-sqlQuery(con, "R_DiagnosisCodes mDiagCd")
# Run Regression
Reg <- lm(Service~Zip+State+Gender+Age+Height+Weight,data)
# Save Data
estimate.table <- cbind("Estimate" = coef(Reg))
DiagCd <- data$DiagCd[1]
data1 <- data.frame(t(estimate.table <- cbind("Estimate" = coef(Reg))),row.names = DiagCd)
sqlSave(con, data1, tablename='Table2', append = TRUE, rownames = 'DiagCd', colnames = FALSE)
}
# Setup Connection
con <- odbcConnect("name", uid="me")
conn <- odbcConnect("name", uid="me")
# Get all codes
codes2 <- sqlFetch(conn, "codes")
x <- sapply(codes2, is.factor)
codes2[x] <- lapply(codes2[x], as.character)
# Loop through codes
for (i in 1:978)
{
# Get DiagCd to for this iteration
mDiagCd <- codes2$DiagCd[i]
# Get Data to run Regression
data<-sqlQuery(con, sprintf("storedproc%s", mDiagCd))
# Run Regression
Reg <- lm(TotalServiceDays~Zip+State+Gender+Age+Height+Weight,data)
# Create to table
estimate.table <- cbind("Estimate" = coef(Reg))
DiagCd <- data$DiagCd[1]
data1 <- data.frame(t(estimate.table <- cbind("Estimate" = coef(Reg))),row.namesDiagCd)
sqlSave(conn, data6, tablename='table', append = TRUE, rownames = 'DiagCd', colnames = FALSE)
}
#Close channels
odbcClose(con)
odbcClose(conn)