全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 SAS专版
14774 22
2015-02-27
data data1;
input a b c;
cards;
1 0 12
1 1 13
2 0 10
2 1 8
3 0 0
3 1 7
;
run;
data data2;
input a c;
datalines;
1 25
2 18
3 7
;
run;
data data3;
merge data1(rename=c=Nil2) data2(rename=c=total);
by a;
Nil1=total-Nil2;
if Nil1=0 or b=1 then
                        output;
/*                else if b=1 then*/
/*                        output;*/
/*                drop b;*/
run;
data data4;
do i=1 to _n_;
set data3 ;
c=a+b;
/*output;*/
end;
run;
data data5;
do _n_=1 to _n_;
set data3;
sum0=sum(sum0,a);
put sum0;
output;
end;
run;
data data6;
do _n_=1 by 1 until (last);
set data3 end=last;
sum0=sum(sum0,a);
put sum0;
output;
end;
run;
其中,data5和data6中结果不一样,并且去掉output语句也不一样,哪位高手指教一下!谢谢哈!

二维码

扫码加我 拉你入群

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

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

全部回复
2015-2-28 09:26:22
楼主,这个练习题从哪找的,很好呀!
把这几个数据集看懂,需要对PDV很了解。
二维码

扫码加我 拉你入群

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

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

2015-2-28 09:28:21
晚上我把我的理解贴出来
二维码

扫码加我 拉你入群

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

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

2015-2-28 13:55:03
data5和data6的区别,关键在于:
1. data5要用两个data-loop才能读完data3里的三条记录,而data6只用一个data-loop。
2. 在新的data-loop开始的时候,变量sum0会被赋值为空值。

data5的详细过程应该是这样:
loop 1:  _n_=1;  DO 语句循环一次,读入data3的第一条,sum0的值为第一条的a的值;
loop 2:sum0被置为空值。
            _n_=2;  DO 语句循环两次;
            第一次读入data3的第二条,sum0的值为第二条的a值;
            第二次读入data3的第三条,sum0的值为二,三条a值的和。
loop 3:sum0被置为空值。
            _n_=3; DO 语句计划执行三次;
            第一次读取时,data3中已经没有数据可读,因此data步结束。

data6的大概是:
loop 1:data3有三条记录,DO语句会循环三次 (第三次循环满足last条件);每次读入的a值都会加到sum0里。
loop 2: sum0置空,DO语句执行SET操作时发现已经没有数据可读,data步结束执行。
二维码

扫码加我 拉你入群

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

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

2015-2-28 22:19:57
白天没时间写,刚刚想起来了,楼上的理解跟我的差多多,就不多写了
二维码

扫码加我 拉你入群

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

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

2015-3-10 14:23:41
pobel 发表于 2015-2-28 13:55
data5和data6的区别,关键在于:
1. data5要用两个data-loop才能读完data3里的三条记录,而data6只用一个d ...
嗯,解答的非常好,我现在明白运行的机制了。谢谢!
二维码

扫码加我 拉你入群

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

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

点击查看更多内容…
相关推荐
栏目导航
热门文章
推荐文章

说点什么

分享

扫码加好友,拉您进群
各岗位、行业、专业交流群