楼主: 有福有德
1557 1

[学习分享] output [推广有奖]

教师

已卖:272份资源

院士

7%

还不是VIP/贵宾

-

威望
4
论坛币
56269 个
通用积分
9.0033
学术水平
344 点
热心指数
203 点
信用等级
274 点
经验
37388 点
帖子
1134
精华
10
在线时间
959 小时
注册时间
2010-10-14
最后登录
2025-12-3

楼主
有福有德 在职认证  发表于 2013-4-1 21:23:56 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

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

经管之家联合CDA

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

感谢您参与论坛问题回答

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

+2 论坛币
  1. data a;
  2. input x y@@;
  3. datalines;
  4. 1 2 3 4 5 6
  5. ;
  6. data c;
  7. set a;
  8. *retain z;
  9. if x=2 then output;
  10. z=y;
  11. run;
复制代码
     这个语句的输出中,最后的z值却是空值,这显得有些奇怪,按道理说应该是将y的值赋给z,但结果却不是。我相信经常使用output语句,应该会注意到这个问题,仔细查了一下手册发现,output语句与run语句在执行输出功能上会出现重叠。因为在SAS程序中run的作用是将数据指针抓取的当前值输出,并随后清空。如果遇到output语句其输出的功能就被output取代了,此时只起到清空的功能(如上例),如果加上retain z,那么在PDV中抓取的值就不会被清空(指针的上一条值被保留)。同样如果将output语句单独放置在SAS语句中,不管前面有多少个条件语句,SAS的数据指针都会重新读一遍数据,也就是每条观测将重复出现,其次数视多少个output语句而定; 可以看出有多少个output就会输出多少次。
二维码

扫码加我 拉你入群

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

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

关键词:output outpu Out put RETAIN 多少

已有 1 人评分经验 收起 理由
webgu + 60 鼓励积极发帖讨论

总评分: 经验 + 60   查看全部评分

所有模型都是错的

沙发
yongyitian 发表于 2013-4-1 22:24:11
在LZ 的例子中, 感觉是 if 在起作用。
在run;语句前使用if 或 where 同样有output的作用。不用output也可以。就这个例子来讲,用不用retain 结果是相同的。
比如

data d;    /* NOTE: The data set WORK.D has 0 observations and 3 variables */
set a;
retain z;
z = y;
if x=2;
run;

data e;  /* NOTE: The data set WORK.E has 3 observations and 3 variables */
set a;
retain z;
z = y;
if x^=2;
run;

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

本版微信群
加好友,备注cda
拉您进交流群
GMT+8, 2026-1-1 16:38