楼主: seasseas
3343 5

用if语句做逻辑判断的时候出错 [推广有奖]

  • 0关注
  • 0粉丝

小学生

64%

还不是VIP/贵宾

-

威望
0
论坛币
2 个
通用积分
0
学术水平
0 点
热心指数
0 点
信用等级
0 点
经验
102 点
帖子
6
精华
0
在线时间
7 小时
注册时间
2012-9-12
最后登录
2015-1-8

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

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

经管之家联合CDA

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

感谢您参与论坛问题回答

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

+2 论坛币
用if语句对final这个变量进行分级grade,代码如下:
data test;
input subject exam1 exam2;
final = (exam1+exam2)/2;
if final ge 0 and final lt 60 then grade='d';
else if final ge 60 and final lt 80 then grade='c';
else if final ge 80 and finla lt 90 then grade='b';
else if final ge 90 then grade='a';
datalines;
10  80  84  
7  85  89  
4  90  86  
20  82  85  
25  94  94  
14  88  84  
;
proc print data=test;
id subject;
var exam1 exam2 final grade;
run;

但运行后结果:
subject    exam1    exam2    final    grade10               80           84      82.0      b7                 85           89      87.0      b4                 90           86      88.0      b20               82           85      83.5      b25               94           94      94.0      b14               88           84      86.0      bgrade全部为b,并没有正确的按if语句给出的区间范围进行分级,大家帮我看看是不是哪里代码出错了,谢谢了!


二维码

扫码加我 拉你入群

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

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

关键词:Subject final Grade exam2 Input test

沙发
seasseas 发表于 2013-2-19 14:21:28 |只看作者 |坛友微信交流群
但运行后结果:
subject    exam1    exam2    final    grade

                                             10        80       84      82.0      b
                                              7        85       89      87.0      b
                                              4        90       86      88.0      b
                                             20        82       85      83.5      b
                                             25        94       94      94.0      b
                                             14        88       84      86.0      b
grade全部为b,并没有正确的按if语句给出的区间范围进行分级,大家帮我看看是不是哪里代码出错了,谢谢了!

使用道具

藤椅
bouluo505 发表于 2013-2-19 14:37:10 |只看作者 |坛友微信交流群
这种问题其实每个人都会犯,解决办法很简单,我通常这样:
print步骤中的
var exam1 exam2 final grade;
这一行删除,或者干脆也不加什么ID,就一个光秃秃的proc print;run;

然后运行一下就知道问题所在了,哈哈!!!

以下为修改后的你的程序:
data test;
input subject exam1 exam2;
final = (exam1+exam2)/2;
if final ge 0 and final lt 60 then grade='d';
else if final ge 60 and final lt 80 then grade='c';
else if final ge 80 and final lt 90 then grade='b';
else if final ge 90 then grade='a';
datalines;
10  80  84  
7  85  89  
4  90  86  
20  82  85  
25  94  94  
14  88  84  
;
proc print data=test;
id subject;
var exam1 exam2 final grade;
run;

祝你好运


已有 1 人评分经验 论坛币 热心指数 收起 理由
webgu + 60 + 10 + 1 热心帮助其他会员

总评分: 经验 + 60  论坛币 + 10  热心指数 + 1   查看全部评分

使用道具

板凳
seasseas 发表于 2013-2-19 14:47:53 |只看作者 |坛友微信交流群
bouluo505 发表于 2013-2-19 14:37
这种问题其实每个人都会犯,解决办法很简单,我通常这样:
print步骤中的
var exam1 exam2 final grade;
...
太感谢了啊

使用道具

报纸
webgu 发表于 2013-2-19 16:22:09 |只看作者 |坛友微信交流群
bouluo505 发表于 2013-2-19 14:37
这种问题其实每个人都会犯,解决办法很简单,我通常这样:
print步骤中的
var exam1 exam2 final grade;
...
可以简化一下:
data test;
input subject exam1 exam2;
final = (exam1+exam2)/2;
if  final>=0 and final <60 then  grade='d';
else if final<80 then grade='c';
else if  final<90 then grade='b';
else  grade='a';

datalines;
10  80  84  
7  85  89  
4  90  86  
20  82  85  
25  94  94  
14  88  84  
;
proc print data=test;
id subject;
var exam1 exam2 final grade;
run;

已有 1 人评分热心指数 收起 理由
bouluo505 + 1 热心帮助其他会员

总评分: 热心指数 + 1   查看全部评分

SAS资源
1. SAS 微信:StatsThinking
2. SAS QQ群:348941365

使用道具

地板
lily83322 发表于 2013-2-21 14:00:34 |只看作者 |坛友微信交流群
看了半天才知道原来是LZ的程序里面单词拼写错误

使用道具

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

本版微信群
加好友,备注cda
拉您进交流群

京ICP备16021002-2号 京B2-20170662号 京公网安备 11010802022788号 论坛法律顾问:王进律师 知识产权保护声明   免责及隐私声明

GMT+8, 2024-6-17 06:45