楼主: mathczh
8748 10

[问答] 关于SAS里面的_N_的问题(我不懂他在if语句里面的机制) [推广有奖]

  • 1关注
  • 0粉丝

初中生

14%

还不是VIP/贵宾

-

威望
0
论坛币
0 个
通用积分
0
学术水平
0 点
热心指数
0 点
信用等级
0 点
经验
425 点
帖子
6
精华
0
在线时间
18 小时
注册时间
2014-9-7
最后登录
2017-4-18

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

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

经管之家联合CDA

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

感谢您参与论坛问题回答

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

+2 论坛币
先上例子
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.
还是不能理解这代码在干什么。求大神指导!谢谢~

二维码

扫码加我 拉你入群

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

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

关键词:represents Data step Automatic statement Variables created

if _n_=1 then set b;
=
if _n_=1 then set b(point=1);
retain value;

使用道具

藤椅
mathczh 发表于 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有什么作用么。= =。病没见过这个。

使用道具

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。

已有 1 人评分学术水平 热心指数 信用等级 收起 理由
luomingming1234 + 1 + 1 + 1 精彩帖子

总评分: 学术水平 + 1  热心指数 + 1  信用等级 + 1   查看全部评分

使用道具

报纸
mathczh 发表于 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是什么鬼,我搜了一下,看不大懂啊= =。
谢谢!我感觉我基本懂了

使用道具

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;





使用道具

7
rdnargt 发表于 2015-11-13 04:17:55 |只看作者 |坛友微信交流群
谢谢楼上,终于明白了

使用道具

8
teqel 发表于 2015-11-13 12:30:07 |只看作者 |坛友微信交流群
sas那个石家庄人 发表于 2015-6-21 21:46
PDV就是program data vector 对 可以看成是一个临时储存数据的地方

point我只知道一个用来生成sample的 ...
只有set statement自动具有retain的功能

使用道具

9
红通通 发表于 2016-8-9 21:48:55 |只看作者 |坛友微信交流群
sas那个石家庄人 发表于 2015-6-21 19:19
set one;
set two;
解释的太赞啦!这块内容什么书里有介绍呢?

使用道具

10
踩云飞 发表于 2016-8-10 17:17:46 |只看作者 |坛友微信交流群
sas那个石家庄人 发表于 2015-6-21 19:19
set one;
set two;
gg的值为什么会retain住?在什么情况下变量值会retain?

使用道具

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

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

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

GMT+8, 2024-4-27 05:26