请选择 进入手机版 | 继续访问电脑版
楼主: 小甲克虫
10147 20

双SET语句解析求大神。 [推广有奖]

  • 9关注
  • 12粉丝

教授

12%

还不是VIP/贵宾

-

威望
0
论坛币
8160 个
通用积分
116.0411
学术水平
10 点
热心指数
20 点
信用等级
8 点
经验
34208 点
帖子
703
精华
0
在线时间
1457 小时
注册时间
2005-9-20
最后登录
2023-6-16
毕业学校
中南财经政法大学

小甲克虫 在职认证  发表于 2012-12-3 21:00:35 |显示全部楼层 |坛友微信交流群
相似文件 换一批

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

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

经管之家联合CDA

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

感谢您参与论坛问题回答

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

+2 论坛币
_N_变量是指针变量。
我想问下。两个SET语句产生一条PDV,两个数据指针,那对应的_N_变量有几个呢?
另外在PDV返回DATA开头时,清除机制是什么?是两个SET对应的变量都清除还是可以有选择地清除?谢谢不吝赐教!
二维码

扫码加我 拉你入群

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

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

关键词:Set Data PDV

本帖被以下文库推荐

pobel 在职认证  发表于 2012-12-3 21:17:09 |显示全部楼层 |坛友微信交流群
1. 不管有没有set语句,不管有几个set语句,每一个DATA step执行过程中_N_变量只有一个;
2. DATA 步执行过程中,返回DATA开头时,SET 数据集中的变量和retain的变量都不会清空,其他的变量清空
和谐拯救危机

使用道具

小甲克虫 在职认证  发表于 2012-12-3 22:11:14 |显示全部楼层 |坛友微信交流群
未命名1.jpg
未命名.jpg
pobel 发表于 2012-12-3 21:17
1. 不管有没有set语句,不管有几个set语句,每一个DATA step执行过程中_N_变量只有一个;
2. DATA 步执行过 ...谢谢大神不吝赐教。那我的疑惑就来了。
第一,双SET 产生双指针,为什么只有一个存储指针变量的变量_N_呢。
双SET语句,是一种效率很高的执行语句,既然只有一个指针变量,那如何实现连个数据集一对多、多对多、一对多条件匹配等复杂操作呢?!
第二,SET语句变量不清空,那新变量值直接替换掉原来的值吗?谢谢大神不吝赐教!

另外,我把某人著作中的例子和解释贴上来,请大神帮我分析。困惑在第五步,为什么RATES表中的数据指针会一直停留?


使用道具

pobel 在职认证  发表于 2012-12-4 08:32:35 |显示全部楼层 |坛友微信交流群
小甲克虫 发表于 2012-12-3 22:11
谢谢大神不吝赐教。那我的疑惑就来了。
第一,双SET 产生双指针,为什么只有一个存储指针变量的变量_N ...
第一,_n_和SET没有关系,和SET几个数据集也没有关系。它是DATA step运行时,每通过一次DATA语句,_N_的值就加一。所以我不认为_N_是一个指针变量。
第二,SET的数据集的变量在DATA步下一个循环开始时不清空,而是执行到SET语句时由新读进来的变量的值去替换原来的值。如:
data test;
   put "==================";
   put "BEFORE SET:" _n_=  age=   x=;
   set sashelp.class;
   x=1;
   put "AFTER SET:" _n_=  age= x=;
   put "==================";
   put;
run;

对于你所提到的第五步,如果程序中是“set ch7.madrid;”,那程序执行过程中返回到DATA步开头时是不会清空表madrid中的变量的值的,只有再次执行 set ch7.madrid;一句时才会用新读进的值替换原来的值。
另外,你所贴出的那五步解释好像并不是针对下面那段程序的。
和谐拯救危机

使用道具

playmore 发表于 2012-12-4 08:58:01 |显示全部楼层 |坛友微信交流群
小甲克虫 发表于 2012-12-3 22:11
谢谢大神不吝赐教。那我的疑惑就来了。
第一,双SET 产生双指针,为什么只有一个存储指针变量的变量_N ...
求问lz看的是哪本书?
SAS里有明确的指针的概念吗?
不是说可以把data步理解为自动的for循环吗?
需要指针吗?谢谢!
playmore邀请您访问ChinaTeX论坛!!!进入ChinaTeX论坛

使用道具

小甲克虫 在职认证  发表于 2012-12-4 13:39:44 |显示全部楼层 |坛友微信交流群
pobel 发表于 2012-12-4 08:32
第一,_n_和SET没有关系,和SET几个数据集也没有关系。它是DATA step运行时,每通过一次DATA语句,_N_的值 ...
那请问,双SET产生双指针,怎么控制这连个指针的指向进度?!谢谢不吝赐教!

使用道具

小甲克虫 在职认证  发表于 2012-12-4 13:40:25 |显示全部楼层 |坛友微信交流群
playmore 发表于 2012-12-4 08:58
求问lz看的是哪本书?
SAS里有明确的指针的概念吗?
不是说可以把data步理解为自动的for循环吗?
我也是不太明白,所以才问的!

使用道具

pobel 在职认证  发表于 2012-12-4 15:01:22 |显示全部楼层 |坛友微信交流群
小甲克虫 发表于 2012-12-4 13:39
那请问,双SET产生双指针,怎么控制这连个指针的指向进度?!谢谢不吝赐教!
我没有看到过什么地方明确讲解了你一直很关心的“指针先跳再读数据还是先读数据再条”,所以我只能根据我的理解说一下SET的执行过程:
1. SET在程序中的位置不重要,即在不在do循环里面不影响SET的运行机制;
2. 一个数据步是单个SET还是双SET,或是多个SET也不重要;
3. 总的原则就是:SAS的运行路径每经过这个SET语句一次,就从这个SET语句指定的数据集中去读下一条数据(这里指一般的set aa;不包括使用point=选项);
4. 一个DATA步执行过程中,无论执行到哪个SET语句,只要是这个SET指定的数据集没有记录可读的时候,整个DATA步即停止。(即一般情况下DATA步的运行停止于SET语句,而不是run语句)
已有 2 人评分学术水平 热心指数 信用等级 收起 理由
孤单的我们 + 1 + 1 + 1 精彩帖子
webgu + 1 + 1 + 1 观点有启发

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

和谐拯救危机

使用道具

小甲克虫 在职认证  发表于 2012-12-4 15:06:26 |显示全部楼层 |坛友微信交流群
pobel 发表于 2012-12-4 15:01
我没有看到过什么地方明确讲解了你一直很关心的“指针先跳再读数据还是先读数据再条”,所以我只能根据我 ...
谢谢赐教。_N_是观测序号一个变量,如果一个DATA步里只能有一个的话,那对于多个SET来说,这个变量是不是失去意义了?

使用道具

pobel 在职认证  发表于 2012-12-4 15:14:43 |显示全部楼层 |坛友微信交流群
小甲克虫 发表于 2012-12-4 15:06
谢谢赐教。_N_是观测序号一个变量,如果一个DATA步里只能有一个的话,那对于多个SET来说,这个变量是不是 ...
_N_ 和SET没有直接关系,和data步里有几个SET更不相关,但不代表他就失去意义。
和谐拯救危机

使用道具

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

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

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

GMT+8, 2024-3-29 07:01