分享

SAS中IF语句、OR语句的使用

 浓tang 2020-08-28

IF语句

序一

要求

      新建一个变量agegroup,年龄age小于20岁分到第一组;年龄age大于等于20岁,且小于40岁分到第二组;年龄大于等于40岁,小于60岁分到第三组;大于等于60岁,分到第四组。

data group;

length gender $1

quiz $2;

input age gender midterm quiz finalexam;

if age lt 20 then agegroup=1;/*①*/

if age ge 20 and age lt 40 then agegroup=2;/*if age between 20 and 40 then agegroup=2*/

if age ge 40 and age lt 60 thenagegroup=3;

if age ge 60 then agegroup=4;

datalines;

21 M 80 B-82

. F 90 A 93

35 M 87 B 85

48 F . . 76

59 F 95 A 97

15 M 88 . 93

67 F 97 A 91

. M 62 F 67

35 F 77 C-77

49 M 59 C 81

;

title'listing of conditional';

proc print data=group noobs;

run;

程序一当中包括一些逻辑运算符,sas中常用的逻辑运算符有如下几种

符号

英文表达

=

EQ

^=、~=、<>

NE

LT

GT

<=

LE

>=

GE

程序一的运行结果

可以发现,在输出的结果中,缺失值都归在第一组中。

程序一的优化

修改程序一,使得缺失值不在分组变量里面

程序一的第一种方式修改

/*修改程序:使得缺失值不包括在第一个年龄组*/

/*四种改法,只需要修改①*/

/*1*/

*if age lt 20 and age ne . then agegroup=1;

/*2*/

*if age ge 0and age lt 20 then agegroup=1;

/*3*/

*if 0 le agelt 20 then agegroup=1;

/*4*/

*if age lt 20 and not missing(age) then agegroup=1;

程序一的第二种方式修改

/*另外一种改法*/

if missing(age)  then agegroup=.;

else if age lt 20 then agegroup=1;

else if age lt 40 then agegroup=2;

else if age lt 60 then agegroup=3;

else if age ge 60 then agegroup=4;

结果

程序二

要求

      输出只有女性的数据集。

代码

data females;

length gender $1

quiz $2;

input age gender midterm quiz finalexam;

if gender eq 'F';/*只输出性别为“F”的数据集*/

datalines;

21 M 80 B- 82

. F 90 A 93

35 M 87 B 85

48 F . . 76

59 F 95 A 97

15 M 88 . 93

67 F 97 A 91

. M 62 F 67

35 F 77 C- 77

49 M 59 C 81

;

title'listing of females';

proc print data=females noobs;

run;

程序二的结果

程序三

       对变量进行分组

程序三代码

data a12;

length gender $1

quiz $2;

input age gender midterm quiz finalexam;

if Quiz = 'A ' or Quiz = 'A' or Quiz = 'B ' or Quiz = 'B'

then QuizRange = 1;

else if Quiz = 'B-'  or Quiz = 'C '  or Quiz = 'C'

then QuizRange = 2;

else if not missing(Quiz) then QuizRange = 3;

/* in 语句

if quiz in('A ','A','B ','B') then quizrange=1;

else if quizin ('B ','B') then quizrange=2;

else if notmissing(quiz) then quizrange=3;

*/

/*select语句

select;

when(missing(Age)) AgeGroup = .;

when (Age lt20) AgeGroup = 1;

when (Age lt40) AgeGroup = 2;

when (Age lt60) AgeGroup = 3;

when (Age ge60) Agegroup = 4;

otherwise;

end;

*/

datalines;

21 M 80 B-82

. F 90 A 93

35 M 87 B 85

48 F . . 76

59 F 95 A 97

15 M 88 . 93

67 F 97 A 91

. M 62 F 67

35 F 77 C- 77

49 M 59 C 81

;

proc print data=a12 noobs;

run;

程序三的结果

OR语句

程序四代码

data believe_it_or_not;

input X;

if X = or X=then Match = 'Yes';

else if missing(X) then Match=.;

else Match = 'No';

datalines;

3

4

5

.

;

title'Listing of BELIEVE_IT_OR_NOT';

proc print data=believe_it_or_not noobs;

run;

程序四结果

IF 条件中DO循环

数据

21 M 80 B- 82

.  F 90 A 93

35 M 87 B 85

48 F  . .  76

59 F 95 A 97

15 M 88 .  93

67 F 97 A  91

.  M 62 F 67

35 F 77 C- 77

49 M 59 C  81

要求

        新建两个变量,agegroup和grade。其中如果年龄age小于等于39,agegroup等于“young group”,同时成绩grade等于期中成绩midterm(占40%)和期末成绩final(占60%)的加权之和。如果年龄age大于39,agegroup等于“old group”,同时成绩grade等于midterm和final的平均值.

代码

data grades;

length gender $1

quiz $2

agegroup $ 13;

infile'G:\data\grades.txt';

input age gender midterm quiz finalexam;

if missing(age) then delete;

/*1 if...then...;*/

/*

if age le 39 then agegroup='young group';

if age le 39 then grade=.4*midterm .6*finalexam;

if age gt 39 then agegroup='old group';

if age gt 39 then grade=(midterm finalexam)/2;

*/

/*2 if ...then do;...end;*/

if age le 39 then do;

agegroup='young group';

grade=.4*midterm .6*finalexam;

end;

else if age gt 39 then do;

agegroup='old group';

grade=(midterm finalexam)/2;

end;

*/

run;

title'listing of grades';

proc print data=grades;

id gender;

run;

结果

来自:《LearningSAS by Example, A Programmers Guide》的学习笔记

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多