请选择 进入手机版 | 继续访问电脑版
楼主: yh930729
2557 9

[技术讨论与投票] 【求助】sas运行速度太忙,有没有大神可以帮忙看看程序,提高一下运行速度?不胜感激 [推广有奖]

  • 0关注
  • 0粉丝

本科生

53%

还不是VIP/贵宾

-

威望
0
论坛币
41 个
通用积分
23.4705
学术水平
0 点
热心指数
1 点
信用等级
0 点
经验
7859 点
帖子
50
精华
0
在线时间
106 小时
注册时间
2015-5-19
最后登录
2019-3-13

yh930729 发表于 2017-7-21 11:15:50 |显示全部楼层 |坛友微信交流群
相似文件 换一批

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

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

经管之家联合CDA

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

感谢您参与论坛问题回答

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

+2 论坛币
libname yu 'd:\yu\';
data yu.yu916;
set yu.d1;

length  phone_type content_type $50. ggsnip sgsnip ip_destin ip_public ip_terminal $15. ua url_detail url_feature $80.;

count1=count(var1,'|');
count2=count(scan(var1,-1,"|","m"),":");
count3=count(scan(var1,-1,"|","m"),"-");
length30=length(scan(var1,-1,"|","m"));
if count1>=29 and count2=2 and count3=2 and length30=19;
drop count1 count2 count3 length30;

cell_num1=scan(var1,1,"|","m");
visit_over_time1=scan(var1,2,"|","m");
ip_terminal=scan(var1,3,"|","m");
ip_public=scan(var1,4,"|","m");
ip_destin=scan(var1,6,"|","m");
ua=scan(var1,8,"|","m");
longtitude1=scan(var1,10,"|","m");
latitude1=scan(var1,11,"|","m");
lac1=scan(var1,12,"|","m");
ci1=scan(var1,13,"|","m");
phone_type=scan(var1,14,"|","m");
rat_type1=scan(var1,15,"|","m");
imsi1=scan(var1,17,"|","m");
stream_type1=scan(var1,18,"|","m");
up_stream1=scan(var1,19,"|","m");
down_stream1=scan(var1,20,"|","m");
all_stream1=scan(var1,21,"|","m");
url_feature=scan(var1,22,"|","m");
visit_begin_time1=scan(var1,-1,"|","m");
content_type=scan(var1,-2,"|","m");
status1=scan(var1,-3,"|","m");
ggsnip=scan(var1,-4,"|","m");
sgsnip=scan(var1,-5,"|","m");
time_length1=scan(var1,-6,"|","m");
time_lag1=scan(var1,-7,"|","m");
url=scan(var1,23,"|","m");
a=index(url,'(A');
b=index(url,'http://');
a1=a-1;
if a>1 and b=0 then url_detail=trim(substr(url,1,a1));
else if a=0 and b=1 then url_detail=scan(url,2,"/");
else if a=0 and b=0 then delete;
drop var1 url a b a1;

cell_num=input(cell_num1,comma32.);
visit_over_time=input(visit_over_time1,anydtdtm40.);
longtitude=input(longtitude1,best10.5);
latitude=input(latitude1,best9.5);
lac=input(lac1,best5.);
ci=input(ci1,best9.);
rat_type=input(rat_type1,best1.);
imsi=input(imsi1,best15.);
stream_type=input(stream_type1,best3.);
up_stream=input(up_stream1,best32.);
down_stream=input(down_stream1,best32.);
all_stream=input(all_stream1,best32.);
visit_begin_time=input(visit_begin_time1,anydtdtm40.);
status=input(status1,best3.);
time_length=input(time_length1,best30.);
time_lag=input(time_lag1,best30.);
format visit_begin_time datetime19.;
format visit_over_time datetime19.;

drop cell_num1 visit_over_time1 longtitude1 latitude1 lac1 ci1 rat_type1 imsi1 stream_type1 up_stream1 down_stream1 all_stream1
     visit_begin_time1 status1 time_length1 time_lag1;

if longtitude='' or latitude='' or cell_num='' then delete;
drop ggsnip sgsnip ip_destin ip_public ip_terminal url_feature;
if longtitude<90 then do;
ab=longtitude;
longtitude=latitude;
latitude=ab;
end;
drop ab;
run;

libname yu 'd:\yu\';
proc sort data=yu.yu916 tagsort sortsize=200m;
by cell_num visit_over_time ;
run; quit;

libname yu 'd:\yu\';
data yu.yu916_2;
set yu.yu916;
by cell_num visit_over_time;
if first.visit_over_time;
    deltat=visit_over_time-lag1(visit_over_time);
        distance=geodist(latitude,longtitude,lag1(latitude),lag1(longtitude));
  if first.cell_num then
  do;
          timeseq=0;
          deltat=.;
        distance=.;
  end;
timeseq+1;
run;



/*A dataset: deal with var data */
/*all*/
libname yu 'd:\yu\';
data yu.ma916;
set yu.yu916_2;
keep cell_num distance deltat up_stream down_stream all_stream rat_type phone_type;
run;

libname yu 'd:\yu\';
proc sort data=yu.ma916;
by cell_num;
run;quit;


libname yu 'd:\yu\';
data yu.a916;
set yu.ma916;
by cell_num;
retain movement;
retain duration;
retain stream_total;
retain stream_up;
retain stream_down;

p=scan(phone_type,1,'-');
if p='APPLE' then phone_system=1;
else if p^='APPLE' then phone_system=0;
holiday=0;

if rat_type=1 then do; G3=1; G4=0; G2=0; G0=0;end;
else if rat_type=2 then do; G3=0; G4=0; G2=1; G0=0;end;
else if  rat_type=6 then do; G3=0; G4=1; G2=0; G0=0;end;
else if  rat_type=0 then do; G3=0; G4=1; G2=0; G0=1;end;

if first.cell_num then do;
movement=0;
duration=0;
stream_total=0;
stream_up=0;
stream_down=0;
end;
movement+distance;
duration+deltat;
stream_total+all_stream;
stream_up+up_stream;
stream_down+down_stream;
if last.cell_num then output;

drop distance deltat all_stream up_stream down_stream p phone_type rat_type;
run;

libname yu 'd:\yu\';
data yu.nb916;
set yu.yu916;
keep cell_num url_detail;
run;

/*B dataset: deal with var data*/
libname yu 'd:\yu\';
proc sort data=yu.nb916;
by cell_num;
run;quit;

libname yu 'd:\yu\';
data yu.ba916;
set yu.nb916;
by cell_num;
if url_detail in ('wspeed.qq.com','c.isdspeed.qq.com','isdspeed.qq.com','mmspeed.qq.com','s.isdspeed.qq.com') then y=1;
else y=0;
retain freq;
if first.cell_num then freq=0;
freq+y;
if freq>0 then y1=1;
else if freq=0 then y1=0;
if last.cell_num then output;
drop y url_detail;
run;

/*merge A and B*/
libname yu 'd:\yu\';
data yu.c916;
merge yu.a916 yu.ba916;
by cell_num;
informat date mmddyy8.0;
format date mmddyy8.;
date=09162015;

drop stream_up stream_down;
run;



libname yu 'd:\yu\';
data yu.nb916;
set yu.yu916_2;
keep url_detail cell_num;
run;

libname yu 'd:\yu\';
data yu.moz916;
set yu.nb916;
by cell_num;
if url_detail in ('img.momocdn.com','ap.immomo.com','imgws.wemomo.com','api.immomo.com','imgdnion.wemomo.com','referee.immomo.com',
'momo-img.qiniucdn.com','et.momocdn.com','cdnst.immomo.com','cdnst.momocdn.com','game.immomo.com','m.immomo.com','file-api.immomo.com',
'www.immomo.com','passport.immomo.com','img.immomo.com','game-api.immomo.com','dl.immomo.com','download.immomo.com','ap.wemomo.com','chat.immomo.com',
   'hulu.youyuan.com','next.youyuan.com','px1.youyuan.com','mmapp2.youyuan.com','ptw.youyuan.com','touch.youyuan.com','pt.youyuan.com','n.youyuan.com',
'v.youyuan.com','youyuan.com','huluemt.youyuan.com','bang.iosui.youyuan.com',
'api.changba.com','aliimg.changba.com','gapi.changba.com','timeline.api.changba.com','vapi.changba.com',
'xiaoqu.qq.com',
'msg.xianglianai.cn','api.xianglianai.cn','pic0.xianglianai.cn','pic1.xianglianai.cn','a.xianglianai.cn','pic9.xianglianai.cn',
'c.tieba.baidu.com','im.tieba.baidu.com:8000','tieba.baidu.com','im.tieba.baidu.com','static.tieba.baidu.com','tippaj.tieba.baidu.com') then y=1;
else y=0;
retain freq_moz;
if first.cell_num then freq_moz=0;
freq_moz+y;
if freq_moz>0 then moz=1;
else if freq_moz=0 then moz=0;
if last.cell_num then output;
drop y url_detail;
run;

libname yu 'd:\yu\';
data yu.cm916;
merge yu.cc916 yu.moz916;
by cell_num;
run;
二维码

扫码加我 拉你入群

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

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


程序.docx

26.69 KB

回帖推荐

大片阳光因你 发表于9楼  查看完整内容

搜SAS HASH TABLE你就懂了 如果真的想要彻底提高运行速度的话 把代码全换成 PROC DS2 这个应该是最快的了
已有 1 人评分热心指数 收起 理由
eijuhz + 1 鼓励积极发帖讨论

总评分: 热心指数 + 1   查看全部评分

jarsky 发表于 2017-7-21 13:11:07 |显示全部楼层 |坛友微信交流群
这么长~

使用道具

yh930729 发表于 2017-7-21 14:18:19 |显示全部楼层 |坛友微信交流群
jarsky 发表于 2017-7-21 13:11
这么长~
对呀~~不知道大神能不能帮忙精简一下程序

使用道具

jarsky 发表于 2017-7-21 16:49:43 |显示全部楼层 |坛友微信交流群
yh930729 发表于 2017-7-21 14:18
对呀~~不知道大神能不能帮忙精简一下程序
我不是大神。不过,你可以讲讲计算逻辑。数据也发上来。data步里这么多行生成变量的语句,头一次见到。

使用道具

l1i2n3i4n5g 在职认证  发表于 2017-7-24 16:32:34 |显示全部楼层 |坛友微信交流群
大概看了一下,建议有些地方用正则表达式

使用道具

同意楼上的意见

满屏幕的scan换成正则表达式

把数据hash一下吧 如果数据大的话hash能显著提高速度

使用道具

yh930729 发表于 2017-7-25 22:43:52 |显示全部楼层 |坛友微信交流群
l1i2n3i4n5g 发表于 2017-7-24 16:32
大概看了一下,建议有些地方用正则表达式
好的,谢谢!!我去试试

使用道具

yh930729 发表于 2017-7-25 22:45:33 |显示全部楼层 |坛友微信交流群
大片阳光因你 发表于 2017-7-25 09:55
同意楼上的意见

满屏幕的scan换成正则表达式
谢谢!!!可以再请教一下如何hash吗,才开始用sas很多还不太懂,不知道方不方便请教一下

使用道具

yh930729 发表于 2017-7-25 22:45
谢谢!!!可以再请教一下如何hash吗,才开始用sas很多还不太懂,不知道方不方便请教一下
搜SAS HASH TABLE你就懂了

如果真的想要彻底提高运行速度的话

把代码全换成 PROC DS2 这个应该是最快的了

使用道具

yh930729 发表于 2017-8-19 10:39:17 |显示全部楼层 |坛友微信交流群
大片阳光因你 发表于 2017-7-28 23:25
搜SAS HASH TABLE你就懂了

如果真的想要彻底提高运行速度的话
好的好的!!!!太感谢了!!!!1

使用道具

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

本版微信群
加好友,备注cda
拉您进交流群

京ICP备16021002-2号 京B2-20170662号 京公网安备 11010802022788号 论坛法律顾问:王进律师 知识产权保护声明   免责及隐私声明

GMT+8, 2024-3-29 04:16