楼主: didizhang
3903 10

[原创博文] SAS PDV重置为MISS的条件是什么? [推广有奖]

  • 0关注
  • 10粉丝

博士生

42%

还不是VIP/贵宾

-

威望
0
论坛币
4 个
通用积分
4.8664
学术水平
22 点
热心指数
24 点
信用等级
21 点
经验
7304 点
帖子
240
精华
0
在线时间
318 小时
注册时间
2004-12-18
最后登录
2020-6-17

相似文件 换一批

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

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

经管之家联合CDA

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

感谢您参与论坛问题回答

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

+2 论坛币
新手,在学习SET以及多个SET时,对于PDV重置为MISS的条件有点迷惑。请问PDV重置为MISS的精确条件是什么,是DATA STEP最后的RUN STATEMENT,还是SET STATEMENT本身(即执行一条SET STATEMENT前,PDV中与该SET STATEMENT后接的data set包含的相同变量全部重置为MISS)?
也许我表述的不够清晰。。。。求高手解惑。。。
二维码

扫码加我 拉你入群

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

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

关键词:Miss Iss MIS PDV statement

沙发
6203479170 发表于 2012-4-11 15:54:24 |只看作者 |坛友微信交流群
当一条观测遇上RUN 输出,然后返回到SET读取下一条观测时,pdv就会reset。前提条件是没使用retain
(使用merge的时候pdv不会reset)

使用道具

藤椅
didizhang 发表于 2012-4-11 16:15:58 |只看作者 |坛友微信交流群
6203479170 发表于 2012-4-11 15:54
当一条观测遇上RUN 输出,然后返回到SET读取下一条观测时,pdv就会reset。前提条件是没使用retain
(使用m ...
假设data set a 有一个var、5个OBS,即x=1、2、3、4、5
那么执行
data _null_;
   put x=;
  set a;
run;
查看LOG可以看到,只有第一个x=. 其余的x=1、2、3、4、5(输出了6条信息)
显然run statement并没有让PDV RESET。所以我觉得不是RUN让PDV RESET,而SET STATEMENT 让PDV RESET,并且只RESET PDV 中,与SET 后接的DATA SET 里的变量名称相同的变量(多个SET情况下)
初步的想法,正在想办法验证。。。。。

使用道具

板凳
6203479170 发表于 2012-4-11 16:29:40 |只看作者 |坛友微信交流群
didizhang 发表于 2012-4-11 16:15
假设data set a 有一个var、5个OBS,即x=1、2、3、4、5
那么执行
data _null_;
并不是set和run 使得PDV reset,而是当某一条数据到达RUN语句后输出,SAS会重新返回到程序的开头,这时PDV 将RESET,你可以理解成是data使得PDV reset

使用道具

报纸
didizhang 发表于 2012-4-11 16:43:55 |只看作者 |坛友微信交流群
6203479170 发表于 2012-4-11 16:29
并不是set和run 使得PDV reset,而是当某一条数据到达RUN语句后输出,SAS会重新返回到程序的开头,这时PD ...
如果是这样的话,那我刚刚的那个简单的代码里,put x= 在日志中应该输出都是MISS,因为PUT是在DATA 执行之后,SET读取下一条OBS之前。这是为什么呢

使用道具

地板
6203479170 发表于 2012-4-11 17:21:26 |只看作者 |坛友微信交流群
当sas回到program读下一条观测时,pdv将会reset,pdv里面由input或说明语句创建的变量会变成missing.但从set里读进的变量不会变成missing。因为到第二次的set的时候它将被下一条的值覆盖。

不知道这样解释你明白吗

使用道具

7
didizhang 发表于 2012-4-11 17:57:18 |只看作者 |坛友微信交流群
6203479170 发表于 2012-4-11 17:21
当sas回到program读下一条观测时,pdv将会reset,pdv里面由input或说明语句创建的变量会变成missing.但从se ...
是吗,那执行下而的语句(chapt3.income里的income分别为210,350,200,210,200
                                    chapt3.stock里的price分别为100,200,300,5,5):
data tmp3;
  tot = price;
  put income=;
  put price=;
  put tot=;
  set chapt3.income;

  tot = price;
  put income=;
  put price=;
  put tot=;
  set chapt3.stock;
run;

观察LOG可以看到:
income=.
price=.
tot=.

income=210
price=.
tot=.

income=210
price=100
tot=100

income=350
price=100
tot=100

income=350
price=200
tot=200

income=200
price=200
tot=200

income=200
price=300
tot=300

income=210
price=300
tot=300

income=210
price=5
tot=5

income=200
price=5
tot=5

income=200
price=5
tot=5
显然,RUN和DATA 都没有让PDV RESET,否则income,price一直都会是miss;其次,“pdv里面由input或说明语句创建的变量”也没有变成missing,仍然是上一步iteration计算出来的结果,否则创建出来的tot应该都是MISS才对。。。你明白我说的意思吗?

使用道具

8
6203479170 发表于 2012-4-11 20:37:16 |只看作者 |坛友微信交流群
加我QQ吧,我详细地告诉你

使用道具

9
6203479170 发表于 2012-4-11 20:37:53 |只看作者 |坛友微信交流群
SAS TEST.ppt (138.5 KB)

希望这个PPT能解答你的问题

使用道具

10
bobguy 发表于 2012-4-12 10:04:08 |只看作者 |坛友微信交流群
6203479170 发表于 2012-4-11 15:54
当一条观测遇上RUN 输出,然后返回到SET读取下一条观测时,pdv就会reset。前提条件是没使用retain
(使用m ...
"当一条观测遇上RUN 输出,然后返回到SET读取下一条观测时,pdv就会reset。前提条件是没使用retain
(使用merge的时候pdv不会reset)"

Any variables from a data set are retained + any variables in retain statement are retained automatically.




使用道具

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

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

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

GMT+8, 2024-5-12 00:38