繁体   English   中英

使用 R package 无法解析 read_sas

[英]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。

此链接具有格式的 SAS 代码

这个链接有.sas7bcat 库

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM