全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 SAS专版
1499 1
2013-04-01
复制代码
     这个语句的输出中,最后的z值却是空值,这显得有些奇怪,按道理说应该是将y的值赋给z,但结果却不是。我相信经常使用output语句,应该会注意到这个问题,仔细查了一下手册发现,output语句与run语句在执行输出功能上会出现重叠。因为在SAS程序中run的作用是将数据指针抓取的当前值输出,并随后清空。如果遇到output语句其输出的功能就被output取代了,此时只起到清空的功能(如上例),如果加上retain z,那么在PDV中抓取的值就不会被清空(指针的上一条值被保留)。同样如果将output语句单独放置在SAS语句中,不管前面有多少个条件语句,SAS的数据指针都会重新读一遍数据,也就是每条观测将重复出现,其次数视多少个output语句而定; 可以看出有多少个output就会输出多少次。
二维码

扫码加我 拉你入群

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

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

全部回复
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;
二维码

扫码加我 拉你入群

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

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

相关推荐
栏目导航
热门文章
推荐文章

说点什么

分享

扫码加好友,拉您进群
各岗位、行业、专业交流群