在SAS中将HTML表格的.txt文件重建为数据集

在SAS中将HTML表格的.txt文件重建为数据集,sas,Sas,我目前正在使用SAS版本9,尝试以.txt格式读取一个HTML表格的平面文件,该表格取自下一页(标题为韦恩·鲁尼的比赛历史): 我已经使用pythonwebscraper和Scrapy将数据保存到一个.txt文件中。我的.txt文件的格式如下所示: 17-08-2013,1:4,斯旺西,曼联,28',7.26,助攻,26-08-2013,0:0,曼联,切尔西,90',7.03,无,14-09-2013,2:0,曼联,水晶宫,90',8.44,比赛最佳进球,17-09-2013,4:2,曼联,拜

我目前正在使用SAS版本9,尝试以.txt格式读取一个HTML表格的平面文件,该表格取自下一页(标题为韦恩·鲁尼的比赛历史):

我已经使用pythonwebscraper和Scrapy将数据保存到一个.txt文件中。我的.txt文件的格式如下所示:

17-08-2013,1:4,斯旺西,曼联,28',7.26,助攻,26-08-2013,0:0,曼联,切尔西,90',7.03,无,14-09-2013,2:0,曼联,水晶宫,90',8.44,比赛最佳进球,17-09-2013,4:2,曼联,拜耳勒沃库森,84',9.18,进球助攻,22-09-2013,4:1,曼彻斯特城,曼联,90',,7.17,进球黄牌,2013年9月25日,1:0,曼联,利物浦,90',无,比赛最佳助攻,2013年9月28日,1:2,曼联,西布罗姆维奇阿尔比恩,90'.

……等等。我想要的是一个与原始表具有相同格式的数据集。我对SAS很熟悉,但倾向于不太使用infle语句。我尝试了一些主题变体,但这种语法使我最接近我想要的:

filename myfile "C:\Python27\Football Data\test.txt";

    data test;
    length date $10.
           score $6.
           home_team $40.
           away_team $40.
           mins_played $3.
           rating $4.
           incidents $40.;

    infile myfile DSD;
    input date $
          score $
          home_team $
          away_team $
          mins_played $
          rating $
          incidents $ ;
run;
这将返回仅包含表的第一行的数据集。我曾尝试使用固定的宽度和指针来设置数据集维度,但由于团队名称等内容的长度可能会发生很大的变化,这会导致数据从平面文件错误地重新组合

我想我已经完成了大部分工作,但最后一点也做不到。如果有人知道我需要的确切语法,那就太好了


谢谢,我会直接从网上读的。像这样的东西;这个方法大约可以工作50%,但写起来却花了整整10分钟,我相信它可以很容易地改进

基本方法是使用
@'string'
读取字符串后面的文本。您最好将其作为ByTestStream阅读,并在
上进行正则表达式匹配
filename rooney url "http://www.whoscored.com/Players/3859/Fixtures/Wayne-Rooney" lrecl=32767;
data rooney;
infile rooney scanover;
retain are_reading;
input @;
if find(_infile_,'<table id="player-fixture" class="grid fixture">')
    then are_reading=1;
if find(_infile_,'</table>') then are_reading=0;
if are_reading then do;
    input @'<td class="date">' date ddmmyy10. 
          @'class="team-link">' home_team $20.
          @'class="result-1 rc">' score $10.
          @'class="team-link">' away_team $20.
          @'title="Minutes played in this match">' mins_played $10.
          @'title="Rating in this match">' rating $6.
    ;
output;
end;
run;

我删除了
dsd
,因为它与
分隔符不兼容;如果确实需要DSD,则可以将其添加回,删除该分隔符,并将分钟作为字符读入。我为评级添加了
??
,因为它有时是“无”的,所以
??
忽略了关于这一点的警告。

您不想直接从web将文件读取到SAS中的任何特定原因?使用正则表达式解析HTML?听起来像波涛汹涌的海水@joe在使用SAS之前,我已经直接从网络上阅读了一些东西,它可以正常工作,但对于多次提交来说,速度太慢了。python是一种实际的web开发语言,它还提供了容易编写可伸缩代码的选项,而SAS则没有。您知道如何使用SAS infle语句读取我的平面文件吗?@RawFocus在这里几乎不适用。@如果您知道自己在做什么,user3045351 SAS的可伸缩性与Python差不多,并且它不应该比Python慢很多,除非您正在做大量的拉取(数百万次?)。至于阅读你的平面文件,我会更新答案。
data want;
infile "c:\temp\test2.txt" flowover dlm="',:"  lrecl=32767;
informat date ddmmyy10.
           score_1 score_2 2.
           home_team $40.
           away_team $40.
           mins_played 3.
           rating 4.2
           incidents $40.;
    input date 
          score_1 
          score_2
          home_team $
          away_team $
          mins_played 
          rating ??
          incidents $ @@;
run;