SAS中文论坛

标题: 新手问个问题 [打印本页]

作者: shiyiming    时间: 2011-3-30 09:20
标题: 新手问个问题
A中的数据:
name    sex      age

wang        m        20
qian         m        19
li              f          25
sun          m        40
wu           m        55

B中的数据:
pcd      mcd

p1        m12
p2        m15
p3        m45
p5        m2

用下面的代码执行之后
[code:3qbjgj5h]
data C;
     set A;
     do i = 1 to cnt by 1;
          set B point = i nobs =cnt;
     end;
run;
[/code:3qbjgj5h]

C:
name    sex      age   pcd      mcd

wang     m        20     p5        m2
qian      m        19     p5        m2
li          f          25     p5        m2
sun       m        40     p5        m2
wu        m        55     p5        m2

为什么只把B中的最后一行观测加到C中了
作者: shiyiming    时间: 2011-3-30 10:03
标题: Re: 新手问个问题
加一个output语句
[code:38hps1e4]
data C;
     set A;
     do i = 1 to cnt by 1;
          set B point = i nobs =cnt;
          output;
end;
run;

[/code:38hps1e4]
作者: shiyiming    时间: 2011-3-30 10:27
标题: Re: 新手问个问题
谢谢,但为什么不加output就只把最后一行观测添加进去了呢?
作者: shiyiming    时间: 2011-3-30 20:38
标题: Re: 新手问个问题
原因是:
当使用point=时,数据是被一种叫做随机取用的方法(random access)来处理的,而在此时数据之中并不蕴含休止符,比如说,end of file,因此,我们必须清晰地表述何时输出(output)何时停止(stop)。我个人的经验是,1.使用point=选项时,程序的环境和语法应该很清晰。如果复杂地套用,有可能会得到你所预想不到的结果。2. 被random accessed 的数据应该较小(比如尽量减少不必要的变量) 3. 这种方法是比较高效的(我不知道为什么)
京剧




欢迎光临 SAS中文论坛 (http://mysas.net/forum/) Powered by Discuz! X3.2