全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 SAS专版
6929 9
2015-11-09
data one 有三条记录,
data two ;
do i =1 to 3;
set data1;
count +1;
output;
end;
run;
data data3;
set data1;
do i=1 to 3;
count+1;
output;
end;
run;
为什么data2有3条记录,data3有9条记录,是因为set每次只读取一条记录吗

二维码

扫码加我 拉你入群

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

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

全部回复
2015-11-9 17:19:09
我记得SAS的一本书上面说过,data 语句本身是一种内置的循环语句,是逐条,逐句的执行,所以,你set语句放在do循环的时候应该只能读取到数据集的第一条记录,循环完成,等于是第一条记录输出了3次..
二维码

扫码加我 拉你入群

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

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

2015-11-9 17:20:26
仅供参考
二维码

扫码加我 拉你入群

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

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

2015-11-9 21:36:29
sxbaby 发表于 2015-11-9 17:19
我记得SAS的一本书上面说过,data 语句本身是一种内置的循环语句,是逐条,逐句的执行,所以,你set语句放在do循 ...
这解释的是第二个程序吗
二维码

扫码加我 拉你入群

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

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

2015-11-10 01:32:14
第一个程序 因为set是一个implicit 循环 一次循环一个observation 你在外面加个do(无非是把循环变成了explicit) 和删掉do的效果是一样的  所以是3个obs


第二个程序 外面set的implicit循环每次循环一个observation 里面的do又会把每个observation再循环三遍 所以是9个obs
二维码

扫码加我 拉你入群

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

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

2015-11-10 06:46:55
一点个人建议:
不要把SET,DO,OUTPUT等等这些语句看的多么”特别“。他们也只是SAS data步里的众多语句中的几个。
他们和x=y+z;这个语句相比,只是功能不同,并没有所谓的轻重之分。

重要的是,你需要搞清楚在执行过程中,程序是怎么“走”的。

比如SET a;语句,每当程序执行到这一句,那SAS就要到数据集a去读取下一条记录。(当遇到a里面没有记录可读的时候,data步停止)仅此而已。

所以完全没必要被什么“循环中用set", “双set,三set”吓到,只要清楚了程序的逻辑和语句的功能,那就没什么难的。
二维码

扫码加我 拉你入群

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

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

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

说点什么

分享

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