[英]failed to parse using R package haven read_sas
I'm importing a sas data file (. sas7bdat ) and its corresponding formats (in R language called " labels ") with a (. sas7bcat ) file to R using haven's package command " read_sas ". 自行导入 sas 文件就可以了。 但是,当我尝试使用以下代码导入格式文件时导入格式文件sas7bcat ,我收到以下错误消息:
pri <- read_sas (path = "Datasets/pri.sas7bdat",
path.cat = "Datasets/formats.sas7bcat")
df_parse_sas_file 中的错误(spec_data,spec_cat,encoding = encoding,catalog_encoding = catalog_encoding,无法解析.../formats.sas7bcat:文件无效,或文件具有不受支持的功能。
我不知道问题出在哪里。 我在 SAS 文件中有近 250 个变量,它们都有标签和格式(在 SAS 术语中)。
我已经阅读了与堆栈溢出问题相关的所有内容。 我认为问题可能出在格式文件本身,但我无法弄清楚问题所在。
我正在使用最新版本的 Haven 2.3.1: 和 R v. 4.0.3 (2020-10-10) 在 ZAEA2361489ECE3AAAB9 上使用 RStudio v.1.3.1093。
sessionInfo()
#> R version 4.0.4 (2021-02-15)
#> Platform: i386-w64-mingw32/i386 (32-bit)
#> Running under: Windows 10 x64 (build 17763)
#>
#> other attached packages:
#> [1] haven_2.3.1
我在 SAS 中创建了一个数据库class
为:
data temp.class;
set sashelp.class;
if sex = "M" then sexnum = 1; else sexnum = 2;
format sexnum sexfmt.;
run;
请注意,您的语法对我不起作用:
haven::read_sas (path = "d:/temp/class.sas7bdat",
path.cat = "d:/temp/formats.sas7bcat")
#> Error in read_sas(path = "d:/temp/class.sas7bdat", path.cat = "d:/temp/formats.sas7bcat") :
#> unused arguments (path = "d:/temp/class.sas7bdat", path.cat = "d:/temp/formats.sas7bcat")
然后我使用了以下语法,得到了和你一样的信息:
haven::read_sas (data_file = "d:/temp/class.sas7bdat",
catalog_file = "d:/temp/formats.sas7bcat")
#> Error in df_parse_sas_file(spec_data, spec_cat, encoding = encoding, catalog_encoding = catalog_encoding, :
#> Failed to parse D:/temp/formats.sas7bcat: Invalid file, or file has unsupported features.
或者如果language for message
设置为fr
:
haven::read_sas (data_file = "d:/temp/class.sas7bdat",
catalog_file = "d:/temp/formats.sas7bcat")
#> Error in df_parse_sas_file(spec_data, spec_cat, encoding = encoding, catalog_encoding = catalog_encoding, :
#> Failed to parse D:/temp/formats.sas7bcat: Unable to allocate memory.
这是由于格式rekof
没有价值。 删除它没关系:
haven::read_sas (data_file = "d:/temp/class.sas7bdat",
catalog_file = "d:/temp/formats.sas7bcat")
#> # A tibble: 19 x 6
#> Name Sex Age Height Weight sexnum
#> <chr> <chr> <dbl> <dbl> <dbl> <dbl+lbl>
#> 1 Alfred M 14 69 112. 1 [Male]
#> 2 Alice F 13 56.5 84 2 [Female]
#> 3 Barbara F 13 65.3 98 2 [Female]
#> 4 Carol F 14 62.8 102. 2 [Female]
#> 5 Henry M 14 63.5 102. 1 [Male]
#> 6 James M 12 57.3 83 1 [Male]
#> 7 Jane F 12 59.8 84.5 2 [Female]
#> 8 Janet F 15 62.5 112. 2 [Female]
#> 9 Jeffrey M 13 62.5 84 1 [Male]
#> 10 John M 12 59 99.5 1 [Male]
#> 11 Joyce F 11 51.3 50.5 2 [Female]
#> 12 Judy F 14 64.3 90 2 [Female]
#> 13 Louise F 12 56.3 77 2 [Female]
#> 14 Mary F 15 66.5 112 2 [Female]
#> 15 Philip M 16 72 150 1 [Male]
#> 16 Robert M 12 64.8 128 1 [Male]
#> 17 Ronald M 15 67 133 1 [Male]
#> 18 Thomas M 11 57.5 85 1 [Male]
#> 19 William M 15 66.5 112 1 [Male]
要删除格式rekof
,您可以:
/* value rekof; */
/* value rekof; */
proc format
)或使用以下 SAS 代码:
proc catalog catalog=lcoc.formats;
delete rekof (et=format);
run;
产生错误的最小示例
在 SAS
libname temp "d:/temp";
option fmtsearch=(temp);
proc format lib=temp;
value test;
run;
data temp.class;
set sashelp.class;
run;
在 R
haven::read_sas (data_file = "d:/temp/class.sas7bdat",
catalog_file = "d:/temp/formats.sas7bcat")
#> Error in df_parse_sas_file(spec_data, spec_cat, encoding = encoding, catalog_encoding = catalog_encoding, :
#> Failed to parse D:/temp/formats.sas7bcat: Unable to allocate memory.
问候,
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.