全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 SAS专版
9871 7
2009-08-20
求助:关于DATA步的SET语句的作用机理问题
哪位牛人能给解释下DATA步的SET的语句具体是如何来读取数据集的。是一条一条观测读,还是整体读?
比如以下这个程序:
data test;
input a b;
datalines;
1 2
1 3
1 4
1 5
1 6
1 7
;
run;
data test;
jianye=0;
if a=1 then jianye+1;
set test;
run;
proc print data=test;
run;

运行后的输出结果是

Obs  jianye a     b

1    0      1     2
2    1      1     3
3    1      1     4
4    1      1     5
5    1      1     6
6    1      1     7
按理来说第一条观测的jianye变量不应该是0,而应该是1呀,为什么会出现这种状况呢?恳请牛人帮助解答。
二维码

扫码加我 拉你入群

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

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

全部回复
2009-8-20 16:20:15
data test;
input a b;
datalines;
1 2
1 3
1 4
1 5
1 6
1 7
;
run;
data test;
jianye=0;
set test;
if a=1 then jianye+1;
run;
proc print data=test;
run;
二维码

扫码加我 拉你入群

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

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

2009-8-20 16:45:23
SET的主要作用是读入数据集中的数据,默认情况下,DATA步每读入一个观测都要执行一次DATA步。
    在LZ的例子中,建立数据集TEST第一个观测时,
    第一步:先把0赋值给变量jianye,
       第二步:执行if a=1 then jianye+1,因为还没读入变量A的值,所以A为默认的缺失值,jianye=0;
       第三步:执行set test,读入第一条数据,此时a=1;
       之后就是循环执行DATA步,直到把TEST的所有观测都读完。

    二楼把SET TEST放在if a=1 then jianye+1之前执行,所以第一个观测 jianye=1。

     关于DATA步的执行过程,建议LZ读读这篇文章《The Secret Life of the Data Step》。
二维码

扫码加我 拉你入群

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

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

2009-8-20 16:58:25
2# sushe1527
谢谢你,的确如此。
可见我基础很不扎实啊。
二维码

扫码加我 拉你入群

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

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

2009-8-20 17:11:10
3# horace_chen
你讲得很透彻,我终于理解了DATA步的原理,谢谢你。只是还有一事不明白,一个DATA步的结尾是以什么作为标志的?我看见挺多代码里,DATA步的结尾都没有 写 RUN。 是不是遇到下一个DATA关键字或者PROC关键字之前的所有内容都算作本次DATA步的内容?
还有,SAS中有没有像C语言那样的单步执行功能?
二维码

扫码加我 拉你入群

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

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

2009-8-21 09:39:47
1、多个DATA步,或多个PROC步,或DATA步和PROC步混用时,后一个DATA语句或PROC起到RUN语句的作用。
    2、SAS有个Debug功能,可以让程序单步执行。
      data test /debug;
           jianye=0;
           set test;
           if a=1 then jianye+1;
       run;

            执行程序后进入调试状态,每按一次ENTER键就执行一步
二维码

扫码加我 拉你入群

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

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

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

说点什么

分享

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