全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 SAS专版
9548 10
2015-06-20
先上例子
data a;
input No;
datalines;
1
2
3
;
run;

data b;
input gg;
datalines;
1
;
run;

data all;
if _n_=1 then set b;
set a;
run;
proc print;run;

结果
all

ObsggNo
111
212
313


去掉if _n_=1 then 的话结果就是只有第一行,第一行我能理解,两个set把列合并了,取小的行数;但是不删去输出结果的机制实在是不明白,看了看一本书上的定义:Two automatic variables are created by every DATA step: _N_ and _ERROR_.
_N_
is initially set to 1. Each time the DATA step loops past the DATA statement, the
variable _N_ increments by 1. The value of _N_ represents the number of times
the DATA step has iterated.
还是不能理解这代码在干什么。求大神指导!谢谢~

二维码

扫码加我 拉你入群

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

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

全部回复
2015-6-20 22:13:52
if _n_=1 then set b;
=
if _n_=1 then set b(point=1);
retain value;
二维码

扫码加我 拉你入群

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

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

2015-6-20 22:26:02
何必不淡定。 发表于 2015-6-20 22:13
if _n_=1 then set b;
=
if _n_=1 then set b(point=1);
大哥,能简单point有什么作用么。= =。病没见过这个。
二维码

扫码加我 拉你入群

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

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

2015-6-21 19:19:29
set one;
set two;

使用两个set statement来合并数据时
当其中一个数据集碰到end of file marker时 数据合并就结束。也就是说set a ; set b; 只会生成一个observation 因为第二个数据集会先检测到end of file marker.


而使用if _n_=1 then set b;当 _n_=1 时 PDV里的情况是:
gg no
1    .
程序继续执行到第二个set 此时 PDV为
gg no
1   1
输出第一个observation出来;

而当第二次循环时 _n_变成了2 所以 if then 执行不了 第一个set无法执行 所以也不能检测到数据集的end of file marker,无法结束程序,因此程序只能继续执行第二个set statement.

而当第二个set还在执行时 pdv里gg的值是retain住的 除非有新的值读取进来 可是上面的if then无法再满足了 所以gg一直是1

当第二个set 的三个observation都读取完了,第二个set statement检测到end of file marker 然后程序结束。因此有3个observation。

二维码

扫码加我 拉你入群

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

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

2015-6-21 21:22:02
sas那个石家庄人 发表于 2015-6-21 19:19
set one;
set two;
有点明白了,不过我们老师上课只讲了半学期的SAS,所以她什么数据存储的机制都没讲,并不懂什么PDV是什么东西,是临时存储数据的地方么?然后再问一个问题,像data step里,横向合并数据的set a,set b也是像输入数据那样,一行一行读的么,读完一行,然后循环,然后再读下一行?直到数据没了?对了还有2l那个讲的point是什么鬼,我搜了一下,看不大懂啊= =。
谢谢!我感觉我基本懂了
二维码

扫码加我 拉你入群

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

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

2015-6-21 21:46:49
mathczh 发表于 2015-6-21 21:22
有点明白了,不过我们老师上课只讲了半学期的SAS,所以她什么数据存储的机制都没讲,并不懂什么PDV是什么 ...
PDV就是program data vector 对 可以看成是一个临时储存数据的地方

point我只知道一个用来生成sample的用法 比如:

这个例子里面 point直接指向某个具体的观测值,假设数据集one里面有100个数据
这个程序会每隔5个观测值选一个 就是个简单的抽样。


data result;
do i = 1 to 100 by 5;
set one point=i;
output;
end;
stop;
run;





二维码

扫码加我 拉你入群

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

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

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

说点什么

分享

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