我正在尝试将我的数据表从 R Studio 导出为 dta 格式。我在 R 中使用 Haven 库中的 write_dta 函数并得到以下错误:
提供的字符串值长于指定列的可用存储大小。
我对 R 和 Stata 很陌生,不明白它的含义以及我应该怎么做。
听起来您的 data.frame 中有一段长文本。处理长字符串的write_dta
已知问题 ( https://github.com/tidyverse/haven/issues/437 )。您可以像这样修剪 data.frame 中的字符串:
df = as.data.frame(apply(YOUR_DATA, 2, function(x){
if(class(x) == 'character') substr(x, 1, 128) else x}))
然后尝试write_dta(df)
。128 个字符的最大长度应该是安全的,但新版本的 Stata 可以处理更多。
我注意到使用 data.frame 解决方案可能会丢失标签。一个小标题将允许一个人保留标签(例如,从调查收集平台导入的带有标签的 *.sav 文件)。
这是一个使用 Haven 读写的 tidyverse 解决方案,可以保留标签。请记住,您的初始 df 也需要是一个小标题。
library(tidyverse)
df <- haven::read_sav("YOUR FILE.sav") # could also be some other file format that you start with as a tibble
df <- df %>%
mutate(across(where(is.character), ~ substr(., 1, 2045)))
haven::write_dta(df, "NAME OF NEW FILE.dta")
对我来说,最大的字符串长度write_dta(df)
是 2045。