【发布时间】: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