全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 SAS专版
1504 2
2012-09-02
10. The SAS data set Sashelp.Prdsale contains the variables Region and Salary with 4 observations per Region. Sashelp.Prdsale is sorted primarily by Region and within Region by Salary in descending order. The following program is submitted:
data one;
set sashelp.prdsale;
retain temp;
by region descending salary;
if first.region then
do;
temp=salary;
output;
end;
if last.region then
do;
range=salary-temp;
output;
end;
run;
For each region, what is the number of observation(s) written to the output data set?
答案是2个!为什么呢?retain在这里的作用是什么呢?temp和range是2个不同的变量,怎么就变成了2个观测呢?
二维码

扫码加我 拉你入群

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

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

全部回复
2012-9-3 21:03:36
先按region升序排,再按salary降序
它是问for each region拉
first.region时会output一次
同样last.region也output一次
所以是2条记录
retain就是这个值保持,知道它变了,然后继续保持,直到它再变了。。。。。
唉,我果然讲不清楚啊。。。。。。。。。。。。
二维码

扫码加我 拉你入群

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

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

2012-9-3 21:18:28
sas语句中如果没有output语句,就默认全部output.
如果有output语句,则只选择符合条件的output.
要理解sas是一个观测一个观测将数据读入pdv,然后执行data步所有程序
程序中很清楚的说明,如果是一个region的第一个,和最后一个,才执行do语句,而output包括在do语句中,所以除了第一个和最后一个,其它的不执行do,自然不会输出。
至于retain,多试几个例子就会明白。如果没有retain,sas在set语句读完一个观测,返回data步开头,读下一个观测时,pdv中所有变量初始化为缺失,而retain语句则保证变量除非被重新赋值,否则在pdv中还是原来的值
二维码

扫码加我 拉你入群

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

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

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

说点什么

分享

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