SAS中文论坛

 找回密码
 立即注册

扫一扫,访问微社区

12
返回列表 发新帖
楼主: shiyiming
打印 上一主题 下一主题

请教一个SAS编程的题目

[复制链接]

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
11#
 楼主| 发表于 2011-8-19 18:54:09 | 只看该作者

Re: 请教一个SAS编程的题目

[quote="sun59338":2qgfuv1j]能否解释一下如下部分代码,SAS是怎样做到连续读入数据到最后,而不是循环地读第一个Item_ID的?
谢谢!
  do _n_=1 by 1 until(last.item_id);
        set raw;
        by item_id;
        rc=h.add();
    end;
item1_count=_n_;[/quote:2qgfuv1j]
呵,sun59338应该没注意到set raw语句吧!当第一次循环完时,数据指针指向的你上边所说的第一个Item_ID的最后一条观测已经读取完,接着指针移向下一条未读取的观测,也就是第二个Item_ID的第一条观测,此时,上边的这一段循环结束,继续执行后边未执行的代码,最后run;run完以后,又返回到此data步开头,因为此时raw数据集仍就打开着且指针未指到raw数据集的最后一条观测,所以继续循环执行此data步;而接下是重新执行到上边的这do循环时,是以前边指针所指向第二个Item_ID的第一条观测开始执行;而不是你说的还继续循环的读取第一个Item_ID;因为此时raw数据集的打开状态仍旧是第一次打开后形成的,而未重新open过,所以此时是以第二个Item_ID的第一条观测开始执行,一直循环执行直到数据集raw读取完,或者中间有stop时,才会停止重复执行data步;此外hopewell大哥给的上边这段代码中的循环变量_n_把它理解成普通的变量如:i,j,k等就行了,不一定要理解成sas自动变量,因为此段代码完成的就是对每一item_id内观测进行指针的控制,我的理解是这样,也可自己试试;此外,为了更好地理解那段代码,你可以把哈希表分时段导出来,导给不同的数据集,否则,导入的hash表结果只是最后一次更新的结果,我想这样应该能够更好地了解前边的那段代码的运行过程吧!!
知识有限,学的不够专业,讲的逻辑不是很好,别见笑哈!!
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
12#
 楼主| 发表于 2011-8-26 23:30:10 | 只看该作者

Re: 请教一个SAS编程的题目

谢谢!
我就是搞不明白SAS是怎样区分这里的_n_与它自己的系统变量_N_的。或许我对系统的自动变量_N_的赋值过程及使用理解有误。
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-6-10 02:36 , Processed in 0.068954 second(s), 19 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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