SAS:从 XML 中删除垃圾数据

Posted

技术标签:

【中文标题】SAS:从 XML 中删除垃圾数据【英文标题】:SAS: removing junk data from XML 【发布时间】:2014-09-12 11:38:09 【问题描述】:

我正在尝试使用 CURL 和 SAS 9.3 下载 XML 数据。我有正确指定 CURL 的 URL(再次感谢 RP)并返回 XML 文件的代码。不幸的是,在 XML 数据之前有一堆垃圾字符会导致错误。通常,我会创建一个字符串来解析垃圾,但如果我增加音量,SAS 中约 32K 的长度限制将成为一个问题。有谁知道如何在不使用字符串变量的情况下从 infile 中删除垃圾数据?或者也许用一个字符串变量来做,但绕过〜32K的限制?最终,我想使用 XML 映射来解析数据以获取 SAS 文件格式。非常感谢。

代码:

%let query= %sysfunc(urlencode(SELECT * FROM yahoo.finance.option_contract WHERE symbol='YHOO'));
%let env  = %sysfunc(urlencode(store://datatables.org/alltableswithkeys));
%let url  = https://query.yahooapis.com/v1/public/yql?q=&query^%nrstr(&)diagnostics=true^%nrstr(&)env=&env;

filename curl pipe "d:\sasdev\common\bin\curl\curl.exe -k &url 2>&1";

data _null_;
  infile curl lrecl=32767;
  input;
  put _infile_;
run;

文件:

% Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed

  0     0    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--     0
100  1092    0
1092    0     0   1591      0 --:--:-- --:--:-- --:--:--  1591<?xml version="1.0" encoding="UTF-
8"?>
<query xmlns:yahoo="http://www.yahooapis.com/v1/base.rng" yahoo:count="1" yahoo:created="2014-07
-21T10:13:07Z" yahoo:lang="en-US"><diagnostics><url execution-start-time="0" execution-stop-time
="1" execution-time="1"><![CDATA[http://www.datatables.org/yahoo/finance/option_contract/yahoo.f
inance.option_contract.xml]]></url><publiclyCallable>true</publiclyCallable><url execution-start
-time="4" execution-stop-time="275" execution-time="271"><![CDATA[http://finance.yahoo.com/q/op?
s=YHOO]]></url><javascript execution-start-time="3" execution-stop-time="285" execution-time="28
1" instructions-used="12243" table-name="yahoo.finance.option_contract"></javascript><user-time>
285</user-time><service-time>247</service-time><build-version>0.2.2635</build-version></diagnost
ics><results><option symbol="YHOO"><contract>2014-07</contract><contract>2014-08</contract><cont
ract>2014-09</contract><contract>2014-10</contract><contract>2015-01</contract><contract>2016-01
</contract></option></results></query><!-- total: 285 -->
<!-- engine4.yql.gq1.yahoo.com -->

【问题讨论】:

您所说的“垃圾”是什么?下载统计数据看起来像表格吗? XML 数据从 开始。我认为前面的数据导致了错误。因此,术语“垃圾”。 对我来说听起来更像是一个curl 问题——你应该能够让它消失。例如见***.com/questions/7373752/…? 乔,非常感谢您的帮助。你是对的。这是一个 CURL 问题。我阅读了您引用的线程以及其他一些线程,并且 -ks(添加 s)删除了标题(又名垃圾数据)。再次感谢。 【参考方案1】:

根据 Joe 的建议,这是一个 CURL 问题,我做了一些快速研究,并在 CURL 命令中添加一个“s”(-ks 而不是 -k)会删除标题(也就是垃圾数据)。

修改后的代码:

%let query= %sysfunc(urlencode(SELECT * FROM yahoo.finance.option_contract WHERE symbol='YHOO'));
    %let env  = %sysfunc(urlencode(store://datatables.org/alltableswithkeys));
    %let url  = https://query.yahooapis.com/v1/public/yql?q=&query^%nrstr(&)diagnostics=true^%nrstr(&)env=&env;

    filename curl pipe "d:\sasdev\common\bin\curl\curl.exe -ks &url 2>&1";

    data _null_;
      infile curl lrecl=32767;
      input;
      put _infile_;
    run;

【讨论】:

以上是关于SAS:从 XML 中删除垃圾数据的主要内容,如果未能解决你的问题,请参考以下文章

sas神经网络:构建人工神经网络模型来识别垃圾邮件

sas神经网络:构建人工神经网络模型来识别垃圾邮件

如何从数组输出中删除垃圾数据

c# 并从内存中删除敏感数据和所有垃圾收集副本

java中的垃圾字符删除

mac如何还原垃圾桶删掉的