首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SAS:从XML中删除垃圾数据

SAS:从XML中删除垃圾数据
EN

Stack Overflow用户
提问于 2014-07-21 20:22:58
回答 1查看 437关注 0票数 0

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

代码:

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

档案:

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

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-07-22 17:33:06

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

经修订的有效代码:

代码语言:javascript
复制
%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;
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24874016

复制
相关文章

相似问题

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