楼主: rickchen666
1259 2

[问答] PROC PRINT 里 WHERE 无法做出有效筛选 [推广有奖]

  • 0关注
  • 0粉丝

等待验证会员

小学生

14%

还不是VIP/贵宾

-

威望
0
论坛币
10 个
通用积分
0
学术水平
0 点
热心指数
0 点
信用等级
0 点
经验
40 点
帖子
1
精华
0
在线时间
8 小时
注册时间
2020-1-22
最后登录
2020-8-10

楼主
rickchen666 发表于 2020-6-18 08:36:50 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

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

经管之家联合CDA

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

感谢您参与论坛问题回答

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

+2 论坛币
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代码哪里出错了。




二维码

扫码加我 拉你入群

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

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

关键词:Where print HERE int ROC

沙发
georgemeng2000 在职认证  发表于 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;

藤椅
jg.sas 发表于 2020-6-22 09:16:55
proc print data = work.shoerange(where salesrange = "lower");
run;

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

本版微信群
加好友,备注cda
拉您进交流群
GMT+8, 2025-12-21 19:24