首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用read_sas天堂read_sas解析失败

使用read_sas天堂read_sas解析失败
EN

Stack Overflow用户
提问于 2021-02-13 20:03:52
回答 1查看 2.7K关注 0票数 0

我使用天堂的包命令“read_sas”将一个sas数据文件(.sas7bdat)及其相应的格式(用称为“标签”的R语言)和一个(.sas7bcat)文件导入到R。在自己的工作上导入sas文件很好。但是,当我尝试使用以下代码导入格式(导入格式文件sas7bcat )时,会收到以下错误消息:

代码语言:javascript
运行
复制
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上。

此链接具有格式的SAS代码。

此链接具有.sas7bcat库。

EN

回答 1

Stack Overflow用户

发布于 2021-03-06 17:01:32

代码语言:javascript
运行
复制
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,如下所示:

代码语言:javascript
运行
复制
data temp.class;
  set sashelp.class;
  if sex = "M" then sexnum = 1; else sexnum = 2;
  format sexnum sexfmt.;
run;

请注意,您的语法不适用于我:

代码语言:javascript
运行
复制
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")

然后,我使用了以下语法,并得到了与您相同的消息:

代码语言:javascript
运行
复制
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

代码语言:javascript
运行
复制
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格式没有价值。可以把它移除:

代码语言:javascript
运行
复制
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代码:

代码语言:javascript
运行
复制
proc catalog catalog=lcoc.formats; 
  delete rekof (et=format);
run;

生成错误的最小示例

在SAS中

代码语言:javascript
运行
复制
libname temp "d:/temp";
option fmtsearch=(temp);

proc format lib=temp;
  value test;
run;

data temp.class;
  set sashelp.class;
run;

在R中

代码语言:javascript
运行
复制
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.

致以敬意,

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66189340

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档