楼主: jjtww
3557 7

[学习分享] 关于“ 完整程序教你怎样利用SAS抓取网页内容”的几点建议 [推广有奖]

  • 10关注
  • 5粉丝

已卖:673份资源

博士生

1%

还不是VIP/贵宾

-

威望
0
论坛币
13076 个
通用积分
2.3774
学术水平
2 点
热心指数
5 点
信用等级
2 点
经验
2841 点
帖子
189
精华
0
在线时间
194 小时
注册时间
2010-6-7
最后登录
2016-4-1

楼主
jjtww 发表于 2012-9-1 02:15:15 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

求职就业群
赵安豆老师微信:zhaoandou666

经管之家联合CDA

送您一个全额奖学金名额~ !

感谢您参与论坛问题回答

经管之家送您两个论坛币!

+2 论坛币
本人学习SAS几个月了,对“完整程序教你怎样利用SAS抓取网页内容”这篇很感兴趣,于是就看了下,看看后怎么感觉怪怪的?于是提出几点建议:
1. 首先你提到"pn,rn为百度查询参数,与SAS宏变量无关",那应不应该加个%nrstr()包起来呢?

2.%*抓取收录的总数量,用于控制读取的页面数;
   data _null_;
    infile baidu length=len lrecl=5000;
    input _t1 $varying5000. len;
    if substr(_t1,1,13)='<p id="page">';
    total=compress(scan(scan(_t1,-3,">"),-2,"<"),"找到相关结果个约,");
    call symput('total',total);
run;
    这段无非是取“  百度为您找到相关结果约 x,xxx,xxx个”,完全可以用find()函数.
3."%else %let pnum=%eval(%eval(&i-1)*&basicn);"
   我认为可以简化点.
4.data _t&i.;    set _t(where=(substr(t1,1,19)="<table cellpadding=") rename=(_t1=t1));    set _t(where=(substr(t2,1,19)="</h3><font size=-1>") rename=(_t1=t2));    href=scan(substr(t1,index(t1,"href="),length(t1)-index(t1,"href=")),2,"""");    title=scan(substr(t1,index(t1,"target="),length(t1)-index(t1,"target=")),3,"""");    title=substr(substr(title,2,length(title)),1,length(title)-1-length("</a"));    format date yymmdd10.;    date=input(scan(scan(substr(t2,index(t2,"<span class="),length(t2)-index(t2,"<span class=")),1,"<"),-1," "),yymmdd10.);    order=_n_+%eval(%eval(&i-1)*&basicn);    call symput("_n",_n_);run;
这一大段,完全可以采取Regular expression来处理.
5."%let dt_&k.=%sysfunc(putn(%eval((%sysfunc(inputn(&sysdate9,date9.)))-&k),yymmddn8.));"
   这一段我看完就受不了了,你用不了这么复杂吧?
   建议这样用:
   %let dt_&k.=%sysfunc(intnx(day,"&sysdate9"d,-&k.,end),yymmddn8.);
6.proc sql noprint;        create table _1drop as        select URI,href        from &dslib..&dsout._&&dt_&k.        where URI not in (select distinct URI from &dslib..&dsout._&dt.)        order by URI;    quit;    proc sql noprint;        create table _2new as        select URI,href        from &dslib..&dsout._&dt.        where URI not in (select distinct URI from &dslib..&dsout._&&dt_&k.)        order by URI;    quit;
    我认为你应该用Merge,SQL的效率还是低些.
以上是些小小的建议,还有其他的一些感觉怪怪的。。。。。
综上我认为:  1.牛人写代码就应该写的漂亮些再发上来,不要误导了SAS初学者和打消对他们学习SAS的积极性.
           2.我认为要学习“SAS抓取网页内容”,首先你得学习些网页HTML的知识吧,至少知道:www.w3.org吧.
           3.要想学好SAS,我认为C或C++语言编程应该不差,其次是英语,能大致看懂老外写的什么,比如下面这两篇介绍
             SAS Filename Url的,尤其是第二篇是SAS Global Forum 2012的,推荐大家看,链接为:
             one:http://www2.sas.com/proceedings/sugi30/100-30.pdf
                          two:http://support.sas.com/resources/papers/proceedings12/119-2012.pdf
                          第三就是兴趣了.
            


二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

关键词:compress varying length infile SUBSTR 程序 网页 where total 百度查询

已有 1 人评分经验 论坛币 收起 理由
crackman + 100 + 60 鼓励积极发帖讨论

总评分: 经验 + 100  论坛币 + 60   查看全部评分

沙发
jjtww 发表于 2012-9-1 13:11:21
建议斑竹加精!

藤椅
让人 发表于 2012-9-1 18:04:54
分析的头头是道,确实原创代码写了冗余了些,果断顶起。

板凳
cduwanglping 在职认证  发表于 2013-8-13 11:18:06
顶一个
大数据时代,就是我们的时代。

报纸
liu5355776 发表于 2014-3-1 09:32:40
good

地板
lookslike 发表于 2014-5-4 22:08:28
都很牛逼啊,不过你这排版也可以再改改。

7
akalius 学生认证  发表于 2014-7-1 22:24:24
您好,能否帮忙看下这个如何提取 ,多谢了啊   http://www.szse.cn/main/disclosure/bulliten/cxda/cfcfjl/

8
jjtww 发表于 2014-7-15 16:37:41
akalius 发表于 2014-7-1 22:24
您好,能否帮忙看下这个如何提取 ,多谢了啊   http://www.szse.cn/main/disclosure/bulliten/cxda/cfcfjl/
加我QQ 1220500093

您需要登录后才可以回帖 登录 | 我要注册

本版微信群
加好友,备注cda
拉您进交流群
GMT+8, 2025-12-28 20:20