全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 SAS专版
1232 2
2020-06-18
1.首先对 sas 自带数据 sashelp.shoes 做处理:
创建新变量 salesrange 对于 sales < 100000 的 obs , salesrange = "lower"
对于 100000 <= sales <= 200000 的 obs , salesrange = "middle"
对于 其他 的 obs , salesrange = "upper"
2: 打印出 salesrange 为 lower 的 observations

本人代码如下:
数据处理:

data work.shoerange;
set sashelp.shoes;
length salesrange $20;
if sales ^=. and sales < 100000 then salesrange = "lower";
else if 100000 <= sales <= 200000 then salesrange = "middle";
else salesrange = "upper";
run;


打印所需数据:

proc print data = work.shoerange;
where salesrange = "lower";
run;

正确答案应该是打印出288条。 但用上述 proc print 之后程序似乎把所有 obs 都改为了 lower 然后打印出来。

ps: 如果新建 data set 再用 where  salesrange = "lower" 做筛选就能正确选择出288个 OBS

想请教下各位大神PROC PRINT代码哪里出错了。




二维码

扫码加我 拉你入群

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

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

全部回复
2020-6-18 19:51:35
不是所有的OBS都打印了,你看看OBS列,11 就不在。结果输出了288行,只是看起来好像是全部结果都输出了。实际上输出结果里没有sales > 100000的。


如果想只输出288行,试试下面的代码:
data work.shoerange;
        set sashelp.shoes;
        length salesrange $20;
        if sales ^=. and sales < 100000 then salesrange = "lower";
        else if 100000 <= sales <= 200000 then salesrange = "middle";
        else salesrange = "upper";
        if salesrange ~= "lower" then delete;
run;

proc print data = work.shoerange;
run;
二维码

扫码加我 拉你入群

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

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

2020-6-22 09:16:55
proc print data = work.shoerange(where salesrange = "lower");
run;
二维码

扫码加我 拉你入群

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

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

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

说点什么

分享

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