楼主: gotobest
14969 22

SAS do循环里的set语句用法请教 [推广有奖]

  • 3关注
  • 1粉丝

硕士生

5%

还不是VIP/贵宾

-

威望
0
论坛币
0 个
通用积分
0
学术水平
0 点
热心指数
2 点
信用等级
0 点
经验
1060 点
帖子
61
精华
0
在线时间
117 小时
注册时间
2014-9-17
最后登录
2016-9-28

楼主
gotobest 发表于 2015-2-27 16:42:41 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

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

经管之家联合CDA

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

感谢您参与论坛问题回答

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

+2 论坛币
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语句也不一样,哪位高手指教一下!谢谢哈!

二维码

扫码加我 拉你入群

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

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

关键词:do循环 Set output rename outpu

沙发
wpfwxn 发表于 2015-2-28 09:26:22
楼主,这个练习题从哪找的,很好呀!
把这几个数据集看懂,需要对PDV很了解。

藤椅
wpfwxn 发表于 2015-2-28 09:28:21
晚上我把我的理解贴出来

板凳
pobel 在职认证  发表于 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步结束执行。
已有 2 人评分经验 学术水平 热心指数 收起 理由
李会超 + 80 精彩帖子
condor_gz + 1 + 1 精彩帖子

总评分: 经验 + 80  学术水平 + 1  热心指数 + 1   查看全部评分

报纸
wpfwxn 发表于 2015-2-28 22:19:57
白天没时间写,刚刚想起来了,楼上的理解跟我的差多多,就不多写了

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

7
michaelxiagang 发表于 2015-3-10 23:23:52
learned. thank you

8
ec189qrw 发表于 2015-3-14 21:33:07
pobel 发表于 2015-2-28 13:55
data5和data6的区别,关键在于:
1. data5要用两个data-loop才能读完data3里的三条记录,而data6只用一个d ...
请问下,为啥 data4只显示了loop 1 和loop3的结果呀?谢谢!
data data4;
do i=1 to _n_;
set data3 ;
c=a+b;
/*output;*/
end;
run;

9
zy3137041217 发表于 2015-11-1 16:58:28
请问楼主data4的详细过程是怎样的?我菜鸟一枚,楼主能否告知?

10
zy3137041217 发表于 2015-11-1 16:59:54
ec189qrw 发表于 2015-3-14 21:33
请问下,为啥 data4只显示了loop 1 和loop3的结果呀?谢谢!
data data4;
do i=1 to _n_;
请问您知道为什么了吗? 我也奇怪各种set和do的组合怎么用的

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

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