我使用天堂的包命令“read_sas”将一个sas数据文件(.sas7bdat)及其相应的格式(用称为“标签”的R语言)和一个(.sas7bcat)文件导入到R。在自己的工作上导入sas文件很好。但是,当我尝试使用以下代码导入格式(导入格式文件sas7bcat )时,会收到以下错误消息:
pri <- read_sas (path = "Datasets/pri.sas7bdat",
path.cat = "Datasets/formats.sas7bcat")
Df_parse_sas_file中的错误(spec_data,spec_cat,编码=编码,catalog_encoding = catalog_encoding,未能解析./formats.sas7bcat:无效文件,或文件具有不支持的特性。
我不知道问题出在哪里。我在SAS文件中有将近250个变量,它们都有标签和格式(在SAS术语中)。
我已经阅读了与堆栈溢出相关的所有内容。我认为问题可能在于格式文件本身,但我不知道是什么问题。
我正在使用最新版本的黑文2.3.1 :和R诉4.0.3 (2020-10-10)使用RStudio v.1.3.1093在Windows 10上。
发布于 2021-03-06 17:01:32
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 ; */
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.
致以敬意,
https://stackoverflow.com/questions/66189340
复制相似问题