楼主: gdhuangsha
1438 2

[问答] 求教关于数组和RETAIN的一个例程 [推广有奖]

  • 0关注
  • 0粉丝

初中生

38%

还不是VIP/贵宾

-

威望
0
论坛币
1299 个
通用积分
0
学术水平
0 点
热心指数
0 点
信用等级
0 点
经验
170 点
帖子
13
精华
0
在线时间
7 小时
注册时间
2013-4-16
最后登录
2019-3-18

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

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

经管之家联合CDA

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

感谢您参与论坛问题回答

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

+2 论坛币
老师在讲授数组和Retain时有这样一个例子

Example 7.11: We are given a time series data for the daily air pollution index.
Suppose the data are stored in a SAS data file, POLLUTE. It has two variables,
namely DATE (a numeric variable) and INDEX. Furthermore, it is assumed that the
records are in ascending order of DATE, and no two records in POLLUTE have the
same DATE value. The time series data start on 1 JAN 2005. Write a program to
create a temporary data set, called MISSD, storing the date when the pollution index
is missing.
利用数组:
DATA MISSD;
KEEP J;
ARRAY K(1) (0); * K1 STORES THE PRECEDING DATE;
SET POLLUTE;
If K1=0 THEN K1=MDY(1,1,2005)-1;
If DATE ^= K1+1 THEN DO J=K1+1 TO DATE-1; OUTPUT; END;
K1=DATE;
RUN;

利用RETAIN:
DATA MISSD;
KEEP J;
RETAIN K 0; * K1 STORES THE PRECEDING DATE;
SET POLLUTE;
If K=0 THEN K=MDY(1,1,2005)-1;
If DATE ^= K+1 THEN DO J=K+1 TO DATE-1; OUTPUT; END;
K=DATE;
RUN;

请问,为什么在使用数组时不需要加RETAIN呢?
对于DATA STEP我可不可以这么理解,data step其实是暗含循环的,有多少记录就迭代多少次,而每次每个变量的值都是重新获取的,如果没有retain修饰的话。
那么按照这个理解,在每次循环时,数组变量的值也都应该是重新获取的啊?
二维码

扫码加我 拉你入群

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

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

关键词:RETAIN RET ETA Time Series Pollution records called start file

沙发
yuerqieqie 发表于 2013-4-17 21:05:53 |只看作者 |坛友微信交流群
The array name is not a variable, and arrays do not define additional variables.
K1 is an element in array.

使用道具

藤椅
gdhuangsha 发表于 2013-4-17 21:32:05 |只看作者 |坛友微信交流群
yuerqieqie 发表于 2013-4-17 21:05
The array name is not a variable, and arrays do not define additional variables.
K1 is an element i ...
哦~原来是这样~

我感觉我们老师讲得不够深入,很多机制没有阐释清楚,学得懵懵懂懂的

使用道具

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

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

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

GMT+8, 2024-5-1 05:23