SAS中文论坛

 找回密码
 立即注册

扫一扫,访问微社区

查看: 9649|回复: 11
打印 上一主题 下一主题

对于SET语句的一个误解

[复制链接]

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
跳转到指定楼层
楼主
发表于 2014-3-31 22:30:28 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
大多数SAS程序员非常熟悉SET语句,以至于在平时使用过程中并不洞悉它的运行机制。但是在某些情况下,SET语句的运行结果并没有如我们所预期的结果那样实现。我们现在看看这个例子:

我们的原意可能是数据集b中如果z缺失就把y值赋为999,结果因为数据集a中没有z变量,以至于y全部都变成了999。

如何解决?很简单,用IN=选项,指定在处理数据集b时才应用999赋值逻辑。

我们再看看,最后一条记录还是不对。那是因为SET语句并不会更新PDV中的值,除非那个是计算变量或者被申明赋值了,显然本例没有这种情况。其次如果该变量是数据步创建的,其初值在数据步每次内循环中会自动设置为缺失,如果像本例一样变量是从数据集中读取的,那么其初值就不会是自动赋缺失。呢么如何解决这个问题呢?更简单用RETAIN语句赋y的初值为缺失。

希望大家今后在使用SET语句时好好思考一下你的程序是不是你想要得到想要的结果,其中有不少玄机的。
分享到:  微信微信
收藏收藏1
回复

使用道具 举报

0

主题

6

帖子

72

积分

注册会员

Rank: 2

积分
72
推荐
发表于 2014-3-31 23:08:34 | 只看该作者


不用in实现,看起来更清楚点吧!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复 支持 1 反对 0

使用道具 举报

6

主题

31

帖子

293

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
293
沙发
发表于 2014-3-31 22:55:12 | 只看该作者
亲自操刀了?
看来我的画图系列该弄了。
SAS资源
1. SAS 微信:mysasnet
2. SAS QQ群:348941365
3. SAS Blog:编程|统计|医药
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
板凳
 楼主| 发表于 2014-3-31 22:57:45 来自手机 | 只看该作者
对的,有空就稍微写一点练练手。
回复 支持 反对

使用道具 举报

0

主题

6

帖子

72

积分

注册会员

Rank: 2

积分
72
地板
发表于 2014-3-31 22:59:18 | 只看该作者
webgu 发表于 2014-3-31 22:55
亲自操刀了?
看来我的画图系列该弄了。

期待中!
回复 支持 反对

使用道具 举报

49

主题

76

帖子

1462

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1462
6#
 楼主| 发表于 2014-3-31 23:11:13 | 只看该作者
stata 发表于 2014-3-31 23:08
不用in实现,看起来更清楚点吧!

对的,很棒!只是为了解释SET语句的用法,让大家看清楚哪里有陷阱。
回复 支持 反对

使用道具 举报

0

主题

6

帖子

72

积分

注册会员

Rank: 2

积分
72
7#
发表于 2014-3-31 23:21:43 | 只看该作者
shiyiming 发表于 2014-3-31 23:11
对的,很棒!只是为了解释SET语句的用法,让大家看清楚哪里有陷阱。

希望管理员多发类似的帖子,谢谢!
回复 支持 反对

使用道具 举报

10

主题

39

帖子

1070

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1070
QQ
8#
发表于 2014-3-31 23:28:22 | 只看该作者
这东西不经常用真的忘记了!刚开始看的时候还真没想通为什么最后一条观测的y是999,看了半天才反应过来原来是从第7条观测的y值遗留过来的!
回复 支持 反对

使用道具 举报

0

主题

3

帖子

12

积分

新手上路

Rank: 1

积分
12
9#
发表于 2014-3-31 23:33:17 | 只看该作者
很好的SAS基础训练贴。
回复 支持 反对

使用道具 举报

0

主题

2

帖子

12

积分

新手上路

Rank: 1

积分
12
10#
发表于 2014-4-10 11:09:32 | 只看该作者
楼主对set a; set b;这种格式有没有研究?
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-22 08:39 , Processed in 0.122402 second(s), 28 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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