全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 SAS专版
3549 5
2013-10-28
已解决,沙发正解。

想问各位老师一个问题呵,程序如下:

复制代码
这个程序过后,数据集B一共有5条观测,而我想要的是6条观测,我想问下,为什么数据集a被第二次set后,加上约束条件,会对第一条set语句的条数有影响?是的,set的的确是同一个数据集。

我只想问问什么,问题我可以用set(in=a)来,解决,谢谢各位:)


二维码

扫码加我 拉你入群

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

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

全部回复
2013-10-28 11:29:50
楼主只要搞清楚data步是什么时候结束的就能解释为什么有5条观测了。

不管一个data步里面有几个set语句,在sas运行过程中,只要其中任意一个set语句中指定的数据集没有记录可读的时候,这个data步就会结束。

楼主的例子中第二个set语句set a(where=(a in (1 3)))实际上是读一个两条记录的数据集,所以在_n_为3的时候,这个set语句不再有记录可读,这时data步结束,后面的语句都不再执行。也就是,前一个output执行三次,后面的output执行两次。
二维码

扫码加我 拉你入群

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

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

2013-10-28 14:19:14
pobel 发表于 2013-10-28 11:29
楼主只要搞清楚data步是什么时候结束的就能解释为什么有5条观测了。

不管一个data步里面有几个set语句, ...
大神,
那么想再继续请教一下,
set 应该是一条一条的读数据,第一个set读取第一条数据 1, 11以后output出来,然后第二个set读取1,1111,到第二条读取2,22以后,第二个set应该读取什么呢?有点糊涂了。
另外,我看结果里面,先有1,11,再有1,1111,为什么到后面又先有3,3333,再有3,33了呢?
谢谢指教
二维码

扫码加我 拉你入群

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

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

2013-10-28 14:38:06
tangliang0905 发表于 2013-10-28 14:19
大神,
那么想再继续请教一下,
set 应该是一条一条的读数据,第一个set读取第一条数据 1, 11以后outp ...
个人认为楼主可以这样理解:每一个set语句所读取的数据,相对于其他set语句来说,都是独立的。

比如楼主的例子中,第一个set语句要读取的数据是:
1 11
2 22
3 33
4 44

而第二个set语句要读取的数据是:
1 11
3 33

整个data步的执行情况是这样的:

_N_=1:
    1. set a;  读入 数据 1  11;并输出
    2. set a(where=(a in (1 3))); 读入数据 1 11。 后面的if语句会将b的值改为11111,输出。

_N_=2:
    1. set a;  读入数据2 22; 并输出
    2. set a(where=(a in (1 3))); 读入数据3 33。后面的if语句将b的值改为33333,输出。

_N_=3:
    1. set a; 读入数据3 33; 输出
    2. set a(where=(a in (1 3))); 没有数据可读,整个data步结束,后面的if语句和output语句都不执行。


二维码

扫码加我 拉你入群

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

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

2014-4-27 10:58:00
pobel 发表于 2013-10-28 14:38
个人认为楼主可以这样理解:每一个set语句所读取的数据,相对于其他set语句来说,都是独立的。

比如楼 ...
厉害,分析的透彻。双set挺容易混的。。。。。。。
二维码

扫码加我 拉你入群

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

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

2014-5-3 18:59:50
pobel 发表于 2013-10-28 14:38
个人认为楼主可以这样理解:每一个set语句所读取的数据,相对于其他set语句来说,都是独立的。

比如楼 ...
受教了
二维码

扫码加我 拉你入群

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

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

相关推荐
栏目导航
热门文章
推荐文章

说点什么

分享

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