楼主: listz
9334 7

求助:关于DATA步的SET语句的作用机理问题 [推广有奖]

  • 1关注
  • 0粉丝

大专生

96%

还不是VIP/贵宾

-

威望
0
论坛币
178 个
通用积分
0
学术水平
0 点
热心指数
0 点
信用等级
0 点
经验
4196 点
帖子
48
精华
0
在线时间
75 小时
注册时间
2009-7-5
最后登录
2021-2-3

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

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

经管之家联合CDA

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

感谢您参与论坛问题回答

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

+2 论坛币
求助:关于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呀,为什么会出现这种状况呢?恳请牛人帮助解答。
二维码

扫码加我 拉你入群

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

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

关键词:data步 Data Set Input Lines 求助 Data 语句 机理 Set

回帖推荐

horace_chen 发表于3楼  查看完整内容

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

本帖被以下文库推荐

沙发
sushe1527 发表于 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;

使用道具

藤椅
horace_chen 发表于 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》。
已有 1 人评分经验 论坛币 收起 理由
bakoll + 3 + 3 精彩帖子

总评分: 经验 + 3  论坛币 + 3   查看全部评分

使用道具

板凳
listz 发表于 2009-8-20 16:58:25 |只看作者 |坛友微信交流群
2# sushe1527
谢谢你,的确如此。
可见我基础很不扎实啊。

使用道具

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

使用道具

地板
horace_chen 发表于 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键就执行一步

使用道具

7
listz 发表于 2009-8-21 11:17:39 |只看作者 |坛友微信交流群
7# horace_chen
确实很好用啊。再贪心一步:怎么样看到单步执行过程中,各个变量值的实时变化?
还有,就是如果我要终止调试过程,是不是只用把debug source和debug log 这两个窗口关掉就行?

使用道具

8
dlennn 发表于 2015-5-7 15:00:49 |只看作者 |坛友微信交流群
学习了,谢谢!

使用道具

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

本版微信群
加好友,备注cda
拉您进交流群

京ICP备16021002-2号 京B2-20170662号 京公网安备 11010802022788号 论坛法律顾问:王进律师 知识产权保护声明   免责及隐私声明

GMT+8, 2024-4-28 17:17