1.SELECT结构
格式一:
SELECT (选择表达式);
WHEN(值列表) 语句;
WHEN(值列表) 语句;
……
OTHERWISE 语句;
END;
功能及流程:
执行SELECT结构时,先计算出选择表达式和值列表中的所有值,然后把选择表达式值由前
向后与值列表中的值相比,发现相等值则执行对应的语句,然后退出SELECT结构(不再查
看后面的值列表)。如果选择表达式的值不等于任何值列表中的值则执行OTHERWISE对应
的语句,这种情况下没有OTHERWISE语句会出错。
例:
DATA ;
INPUT month $ @@;
put month @;
SELECT(month);
WHEN('Feb', 'Mar', 'Apr') put '春天';
WHEN('May', 'Jun', 'Jul') put '夏天';
OTHERWISE put '秋天或冬天';
END;
CARDS;
Mar Jun oct
;
run;
格式二:
SELECT;
WHEN(条件) 语句;
WHEN(条件) 语句;
……
OTHERWISE 语句;
END;
这种SELECT语句没有选择表达式,而是在每一个WHEN语句指定一个条件(逻辑表达式),
执行第一个满足条件的WHEN后的语句。如果所有条件都不满足则执行OTHERWISE后的语句。
例:
data;
input age @@;
put age @;
SELECT;
WHEN(age<=12) put '少年';
WHEN(age<35) put '青年';
OTHERWISE put '中老年';
END;
cards;
10 30 50
;
run;
2.循环结构
⒈计数DO循环
⒉当型循环
⒊直到型循环
⒈计数DO循环
计数DO循环的格式:
DO 计数变量 = 起始值 TO 结束值 BY 步长;
循环体语句……
END;
这种结构与BASIC中计数循环很类似,功能也相当,只是在SAS中是以关键字DO开头(不是FOR),
另外步长用BY引导(不是STEP),而结构以END结束(而不是NEXT)。
其功能与流程:
程序先把计数变量赋值为起始值,如果此值小于等于结束值则执行循环体语句,然后把计数变量
加上步长,再判断它是否小于等于结束值,如果是则继续执行循环体,直到计数变量的值大于结
束值为止。上述结构中“BY 步长”可以省略,这时步长为1。如果步长取负值,则继续循环的条
件是计数变量大于等于结束值。
计数DO循环举例:
data;
sum=0;
DO i = 1 TO 10 ;
sum +i;
/*此处sum+i等价于sum=sum+i*/
END;
PUT sum=;
run;
在循环体中可以用LEAVE语句跳出循环(功能与C语言的break语句相当),如:
data;
n=13;
flag=1;
DO i = 2 TO n/2 ;
if mod(n,i)=0 then do;
flag=0;
leave;
end;
END;
if flag=1 then
put n "是素数";
else
put n "不是素数";
run;
⒉当型循环
当型循环的格式:
DO WHILE(循环继续条件);
循环体语句……
END;
程序先判断循环继续条件是否成立,成立时执行循环体语句,再判断循环继续条件,
如此重复,直到循环继续条件不再成立。
data;
x=243;
y=63;
z=mod(x,y);
DO WHILE (z ^= 0);
x=y;
y=z;
z= mod(x,y);
END;
put y;
run;
⒊直到型循环
直到型循环的格式:
DO UNTIL (循环退出条件);
循环体语句……
END;
程序先判断循环退出条件是否成立,成立则结束循环,否则继续。
例:
data;
n=0;
do until (n>=5);
n+1;
put n=;
end;
run;