SAS中文论坛

 找回密码
 立即注册

扫一扫,访问微社区

查看: 3565|回复: 3
打印 上一主题 下一主题

求教:SAS中retain的用法

[复制链接]

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
楼主
 楼主| 发表于 2012-2-12 16:54:17 | 只看该作者

求教:SAS中retain的用法

请教友友,retain后的变量在读取数据是第一个数值是如何定义的?
比如:
01  data out ;
02  retain d;
03  input a b ;
04   c=max(a,b);
05  d=max(c,d);
06  cards;
1 2
3 4
5 8
6 7
;
proc print;run;
/*当程序第一次运行到05行时,此时的d=?*/
/*本人新手,谢谢指导*/
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
沙发
 楼主| 发表于 2012-2-17 16:32:52 | 只看该作者

Re: 求教:SAS中retain的用法

这里d没有赋予初始值,所以当第一次运行到05时,d的值就是0,也就是缺失值.所以此时它和c=2比较,然后d=2
下次循环,c=4,由于有retain,使得d的值为上次循环的结果即为2,与c比较得到4...每次得到c的值,它都与上次得到的d值相比较,
这样就得到了d的值了.
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
板凳
 楼主| 发表于 2012-2-18 22:51:49 | 只看该作者

Re: 求教:SAS中retain的用法

[quote="leon_sas":2mp41br3]这里d没有赋予初始值,所以当第一次运行到05时,d的值就是0,也就是缺失值.所以此时它和c=2比较,然后d=2
下次循环,c=4,由于有retain,使得d的值为上次循环的结果即为2,与c比较得到4...每次得到c的值,它都与上次得到的d值相比较,
这样就得到了d的值了.[/quote:2mp41br3]
多谢leon_sas,其实我开始是这么猜想的,反推的,不确定!sas系统就是这么默认的吗?
再请教:
01  do until (prod gt 6);
02   prod+1;
03   end;
04   run;
05   proc print;run;
以上程序中,我将01行()中的参数先去掉了gt,output结果不变;
后又去掉了prod和gt,结果还是和前两次一样!
在这里prod的初始值是不是也是0?
gt又是什么意义?
请教...
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
地板
 楼主| 发表于 2012-2-23 13:01:24 | 只看该作者

Re: 求教:SAS中retain的用法

gt的是大于的意思,即greater than。do until是这样一种循环,prod每循环一次就自动加上1,直到它的值大于6就终止循环。所以返回的结果自然为7了。如果符号是ge(greater or equal than)大于等于6,则返回结果为6了。我觉得这里prod的初始值应该是0。
回复 支持 反对

使用道具 举报

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

本版积分规则

QQ|小黑屋|手机版|Archiver|SAS中文论坛  

GMT+8, 2025-5-6 20:44 , Processed in 0.069188 second(s), 20 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表