【问题标题】:Uploading an XML file to SAS将 XML 文件上传到 SAS
【发布时间】:2015-02-23 23:37:37
【问题描述】:

我正在尝试将 XML 格式的 stackexchange 数据转储上传到 SAS。 它采用这种特殊格式。

     <?xml version="1.0" encoding="UTF-8"?>
        -<votes>
        <row CreationDate="2013-10-22T00:00:00.000" VoteTypeId="2" PostId="4" Id="1"/>
        <row CreationDate="2013-10-22T00:00:00.000" VoteTypeId="16" PostId="1" Id="2"/> 
        <row CreationDate="2013-10-22T00:00:00.000" VoteTypeId="2" PostId="1" Id="3"/>
        </votes>

我尝试在 SAS 中使用默认的 XML 解析脚本,如 xml 和 xml92,但导入不成功。

libname Stackof xml 'C:\Users\abc\Documents\My SAS Files\Stackof\Votes.xml';   
libname Stack 'C:\Users\abc\Documents\My SAS Files\Stack';  
data stack.votes;    
set stackof.votes;         
run;

我能够在 Excel 中打开较小的文件,将它们转换为 CSV,然后上传它们,但对于大文件(大约 29 GB 的帖子和来自堆栈溢出的投票数据),最好的方法是什么。

【问题讨论】:

  • 如果您实际上已将数据转储导入 SAS,我很乐意查看代码。这是我之前考虑过但一直没有去做的事情。
  • @joe 我能够创建 XMLmap 并为投票数据上传较小的文件。我按照您的建议使用了 XML 地图实用程序。这相当简单,但我实际上并没有能够为大型系列做到这一点。即使计算机内存支持,默认的 SAS 限制也在 2 GB 左右。我想一种方法是拆分大型 XML 文件,然后进行上传。另一个问题是帖子数据。默认 SAS 解析器未正确解析内容。必须是一些特殊字符。
  • 如果您有更多可用内存,您可以在配置文件中增加 MEMSIZE(当然,对于 Windows 始终保留 2GB)。 MEMSIZE,SORTSIZE,至少应该在大多数安装中增加。
  • 对于特殊字符,如果你有 9.3 或 9.4,你应该有一个 Unicode 版本在其他语言下可用;应该处理特殊字符。
  • 它不是 SAS 限制。它的 XMLV2 LIBNAME 引擎限制。发生该错误的原因是 XMLV2 LIBNAME 引擎在解析 XML 文件时可能无法正确释放内存并最终耗尽内存。编辑:我刚刚查了一下。 SAS 9.4 有一个可用的修复程序。好吧,看来我必须更新 SAS。

标签: xml xml-parsing sas


【解决方案1】:

要导入这样的 XML 文件,您应该首先创建一个 XML 映射。有关该主题,请参阅 SAS Documentation。您可以手动创建地图(我之前做过多次),也可以使用与 SAS 捆绑在一起的 XML Map 实用程序或单独下载。确保为您的 SAS 版本制作正确的地图版本,因为更高版本的 SAS 支持更复杂的地图。

地图基本上告诉 SAS 什么定义了数据集,什么是行,什么是列,以及每列是什么数据类型。这让 SAS 知道什么东西放在哪里,否则它不知道把东西放在哪里。

【讨论】:

  • Joe - 您能否提供任何有关这对单个大文件的执行情况的信息?我已经对数十万条 XML 记录尝试过这种方法,但发现它并不是特别有效(似乎有很多开销)。我没有考虑将它们全部放入一个巨大的 XML 文件中并以这种方式进行尝试。
  • @RobertPenr​​idge 100000 个 xml 文件肯定会有很多开销。对于大型的某些定义,我以前以合理的性能成功完成了一个大文件;我猜你必须在你的机器和你的数据文件上测试它。当然,10-15 个变量的 10k-100k 行对我来说很好读。
猜你喜欢
  • 2016-11-17
  • 1970-01-01
  • 2023-03-12
  • 1970-01-01
  • 1970-01-01
  • 2019-08-12
  • 1970-01-01
  • 2020-12-09
  • 2019-03-22
相关资源
最近更新 更多