条件控制
if-then语句,基本格式:
if expression then statement;
<else statement;>
若有多个表达式(expression) 时,用and/or来连接,如if status='OK' and type=3 then count+1;
;如有多个执行语句(statement)时,使用do/end语句来连接,如row+1; if row>7 then do; pg+1; row=1; end;
;if语句也可与delete联用,将符合条件的观测删除,如if age>12 then delete;
/*if-then语句*/
data stu1;
set bmi;
length bd $50.;
if bmi<18.5 then bd="偏瘦";
else if bmi<24 then bd="正常";
else if bmi<27 then bd="偏胖";
else if bmi<30 then bd="肥胖";
else if bmi>=30 then bd="重度肥胖";
run;
/*and的用法*/
data a;
set bmi;
length para $50.;
if bmi>18.5 and id<10 then para="A";
run;
/*or的用法*/
data b;
set bmi;
length para $50.;
if bmi>18.5 or id<10 then para="A";
run;
/*用do/end来连接执行语句*/
data d;
set bmi;
length a $50. b $50.;
if bmi>20 then do;
a="A";
b="B";
end;
run;
/*delete用法*/
data e;
set bmi;
if bmi<24 then delete;
run;
补充
如果if-then语句不完整,比如“if age>18”。在这种情况下,动作是隐含的。如果表达式的值为真,则继续执行data步;如果表达式的值非真,则停止执行该观测的后续语句,该观测不会添加到正在创建的数据集,然后sas会接着处理下一个观测。
do循环语句
do-end循环语句,基本格式:
do index-variable=start to stop <by increment>;
……more SAS statement……;
end;
/*
do 变量=初始值 to 最终值 <by 增加量>;
SAS语句;
end;
*/
根据增加量的值继续执行,直到满足以下条件之一:
index-variable的值超过stop的值
do语句中指定的while或until字句被满足
do while(expression)|until(expression);
……more SAS statement……;
end;
当条件(expression)为真时,do语句重复执行。
data f;
k=2;
do j=1 to 10 by 2;
m=k+j;
output;/*将每一次的循环结果均输出,若不写则只输出最终结果*/
end;
run;
data g;
k=1;
do while(k<=10);
k=k+2;
output;
end;
run;
补充
比较运算符
符号 | 助记符 | 含义 |
---|---|---|
= | EQ | 等于 |
¬=或^=或~= | NE | 不等于 |
> | GT | 大于 |
< | LT | 小于 |
>= | GE | 大于等于 |
<= | LE | 小于等于 |
IN运算符
IN 运算符也可以进行比较
if example in ('a','b') then model='star';
该语句指只要变量example的值是a或b,设置变量model等于star
AND OR
符号 | 助记符 | 含义 |
---|---|---|
& | and | 所有表达式必须为真 |
!或竖线分隔符 | or | 至少有一个表达式为真 |