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中常用的逻辑运算符有如下几种
程序一的运行结果 可以发现,在输出的结果中,缺失值都归在第一组中。 程序一的优化 修改程序一,使得缺失值不在分组变量里面 程序一的第一种方式修改 /*修改程序:使得缺失值不包括在第一个年龄组*/ /*四种改法,只需要修改①*/ /*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 = 3 or X=4 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》的学习笔记 |
|