第三周的nju mail loglog作业,不知道哦这个结果ok么

后使用快捷导航没有帐号?
查看: 3386|回复: 44
第三周作业完成方法
高级会员, 积分 697, 距离下一级还需 303 积分
论坛徽章:5
本帖最后由 levinjiang 于
13:16 编辑
第三周作业完成了,以下是我的思路:1.采用两个数据集分别获取目标邮箱及发送状态。原因:目标邮箱只在以“starting delivery”的句子中存在,而发送状态则只在“delivery”的句子中存在。
2.发送状态及原因,状态如何我就不细说了,原因方面我采用了一些函数处理了一下,有“remoteXXXXSAID”的就只提取后面文本,否则,整个句子都是原因。data mail_
& &infile &d:\maillog.txt& ls=2048;
& &input @'starting delivery ' mailID 4. +2
& && && &(zhanwei1-zhanwei4) ($)
& && && &mail_ad :$512.
& & & & ;
& &drop zhanwei1-zhanwei4;
data mail_msg_
& &infile &d:\maillog.txt& ls=2048;
& &
& &input @'delivery ' mailID 4. +2
& && && &status :$25.
& && && &reason &:$256.;
& &if status^='msg';
& &k=klength(reason);
& &l=index(reason,'Remote_host_said:');
& &if l^=0 then reason=substr(reason,l+17,k-l-17);
& &status=compress(status,':');
& &
proc sort data=mail_
& &by mailID;
proc sort data=Mail_msg_
& &by mailID;
& &merge mail_start Mail_msg_
& &by mailID;
复制代码
金牌会员, 积分 2870, 距离下一级还需 130 积分
论坛徽章:15
01.data mail_
02.& &infile &d:\maillog.txt&;
03.& &input @'starting delivery ' mailID 4. +2
04.& && && &(zhanwei1-zhanwei4) ($)
05.& && && &mail_ad :$256.
06.& && &&&;
07.& &drop zhanwei1-zhanwei4;
09.data mail_msg_
10.& &infile &d:\maillog.txt& ls=2048;
12.& &input @'delivery ' mailID 4. +2
13.& && && &status :$25.
14.& && && &reason :$256.;
15.& &if status^='msg';
16.& &l=index(reason,'Remote_host_said:');
17.& &if l^=0 then reason=substr(reason,l+17,256);
18.& &status=compress(status,':');
22.proc sort data=mail_
23.& &by mailID;
26.proc sort data=Mail_msg_
27.& &by mailID;
31.& &merge mail_start Mail_msg_
32.& &by mailID;
33.
复制代码
复制代码
金牌会员, 积分 2870, 距离下一级还需 130 积分
论坛徽章:15
难道就我一个人顶吗~
论坛徽章:27
大家采用的都是合并的方法,代码写起来是比较简单,学习了。
论坛徽章:27
这种方法,合并时候delivery并没有去重
中级会员, 积分 213, 距离下一级还需 287 积分
论坛徽章:1
顶一下,对于刚入门的我们帮助很大,谢了!~
高级会员, 积分 507, 距离下一级还需 493 积分
论坛徽章:3
高手啊,能写这么多!
中级会员, 积分 467, 距离下一级还需 33 积分
论坛徽章:3
归归,同学动作真快,向你致敬。
高级会员, 积分 697, 距离下一级还需 303 积分
论坛徽章:5
lixueshan 发表于
这种方法,合并时候delivery并没有去重
已经去重了,注意那个不等于号的作用
高级会员, 积分 697, 距离下一级还需 303 积分
论坛徽章:5
lixueshan 发表于
这种方法,合并时候delivery并没有去重
已经去重了,注意那个不等于号的作用后使用快捷导航没有帐号?
查看: 1040|回复: 5
第三周作业input数据问题
中级会员, 积分 312, 距离下一级还需 188 积分
论坛徽章:11
开始的时候想粗暴的将所有数据先读入到数据集中,然后再处理,看了看文件最多就9列,所以就:input f1-f9;
结果粗看起来数据都读入成功了,结果就继续往下做了,直到最后讨论success数量时才发现,我的少很多啊,再看最开始input的数据,由于很多行数据不足9列,所以从第二行开始数据就乱了,哎。
一时没找到处理的办法,后来想先读取两列,根据starting还是delivery决定是读9列还是5列。
input f1-f2;
if f2='starting' then input #1 f1-f9;
不知道大家都是怎么处理的?
中级会员, 积分 430, 距离下一级还需 70 积分
论坛徽章:5
我也是有这样的问题,后来先将源文件转成excel然后导入sas数据集,期待其他高手的答复
金牌会员, 积分 1292, 距离下一级还需 1708 积分
论坛徽章:7
先用 infile 'c:\temp\maillog.txt'&&missover 试一试
MISSOVER 读到有一行比变量少是自动给于缺项值。
新手上路, 积分 3, 距离下一级还需 47 积分
论坛徽章:2
不知道上面的missover是什么意思?
中级会员, 积分 312, 距离下一级还需 188 积分
论坛徽章:11
看来我们找的应该就是这个missover,回头试试,多谢了。
论坛徽章:22
请使用 @行尾随符,
input f1-f2 @;
if f2='starting' then input #1 f1-f9;后使用快捷导航没有帐号?
查看: 3780|回复: 39
第三周作业(解析邮件日志信息)完成,发帖记录一下
论坛徽章:6
& && &本周的作业是解析邮件日志信息的题目,总体来说难道不大,无非就是一些数据读取,数据集排序,合并等语句的使用。题目中惟一让我感到困惑的就是这个要求“某些邮箱会被反复发送多次,那么只提取最后一次记录 ”,从邮件日志中可以看到有delivery id(如1820),还有消息ID(如850901),而解析的结果中delivery id没有重复的,消息ID虽有重复,并且发向了同一个邮箱,但是多次向同一邮箱发送邮件也是很正常的事情,所以一直没太明白这个要求到底要让我们做什么。经过与的讨论,总算是明确了老师的意图:只是不想让我们这么快就把作业给做完了,就是想让我们多学一下数据集的各种操作。好吧,我承认完成这个要求时,我学会了first和last的用法。
& &&&还是老规矩,分享一下我的代码以及结果截图如下:
libname sas 'd:/workspace/workspace_sas';
data sas.task03_message_send(keep=delivery_id target_email) sas.task03_message_result(keep=delivery_id result fail_reason);
infile 'D:\workspace\workspace_sas\course03\maillog.txt' LS=2048;
input +26 _flag :$10. @;
if _flag='starting'
& &*开始发送信息;
& &input +8 _delivery_id :$10. +3 _msg_id +10 target_email :$64.;
& &delivery_id = input(substr(_delivery_id,1,length(_delivery_id)-1),8.);
& &output sas.task03_message_
else if _flag ='delivery'
& &*接收到返回的结果;
& && & & & length result $10.;
& && & & & input&&_delivery_id :$10. _result :$10. @;
& & delivery_id = input(substr(_delivery_id,1,length(_delivery_id)-1),8.);
& & result =substr(_result,1,length(_result)-1);
& & & & if result ne 'success' then input fail_reason :$255.;
& & & & output sas.task03_message_
proc sort data=sas.task03_message_
by delivery_
proc sort data=sas.task03_message_
by delivery_
data sas.task03_
merge sas.task03_message_send sas.task03_message_
by delivery_& & & &
*丢弃未匹配的值;
if length(result)&2 or length(target_email) & 2
proc sort&&data=sas.task03_
by target_
data sas.task03_email_
& & set sas.task03_
& & & & by target_
if last.target_复制代码最终的task03_email_list结果如下:
QQ截图24.jpg (172.08 KB)
14:43 上传
中级会员, 积分 213, 距离下一级还需 287 积分
论坛徽章:1
中级会员, 积分 239, 距离下一级还需 261 积分
论坛徽章:1
学习了,非常感谢!
高级会员, 积分 546, 距离下一级还需 454 积分
论坛徽章:4
哦,还可以这样,output到不同的数据集,学习了~~
中级会员, 积分 404, 距离下一级还需 96 积分
论坛徽章:1
学习~~~ 楼主很厉害
金牌会员, 积分 1996, 距离下一级还需 1004 积分
论坛徽章:4
学习了,比我当年作的复杂
论坛徽章:6
sas-67 发表于
学习了,比我当年作的复杂
前辈啊,当年是哪一年啊
高级会员, 积分 757, 距离下一级还需 243 积分
论坛徽章:2
学习了,验证了我的想法:可以用input不停地读行。
中级会员, 积分 299, 距离下一级还需 201 积分
论坛徽章:1
学习了,多谢LZ
中级会员, 积分 448, 距离下一级还需 52 积分
论坛徽章:1
22.else delete&&其实可以不要了&&output 手动提交&&无用数据不会提交的}

我要回帖

更多关于 msn mail log 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信