标签:if do continue leave retain
本次重点:data步循环与控制
涉及:if/then/else语句,select语句,do语句,continue语句,leave语句
1.if then else 语句
高效率的if应用:
1)
If
Else if x=2
Else y=3;
对于每一个数据集的观测,if-then-else只会判断一次,为真则执行
2)
If status=1 then
If status=5 then
If status=9 then output;
高效率:包含一个序列if-then语句,只要其中有一个if为假,则程序将不再执行下面的if语句
If status=1 and status=5 andstatus=9 then output;则无效率,需要判断所有的条件
3)
If status in (1,5,8,9) then newstat="single";
Else
高效率:对于在in算符里面的表达式,只要有一个为真,则sas就执行后面的语句
如果用or语句的形式,则需要判断所有的条件是否为真,效率则低
2.select语句
libname chapt6 ‘f:\data_model\book_data\chapt6‘;
data fishdata4;
array tr[1:4] length1-length4;
if last.date;
keep location date length1-length4;
run;
拉直数据,相当于行转列;
中间黄色部分也可以用select的另一种方式:
3.do语句
1) do组语句
Do;
end;
常用于和if then/else语句中
2)do循环语句
Do
Do
Do i=1 to n-1;
Do i=1 to 100 by 10; --规定步长
Do i=1 to 20 by 2 until (x>y);
Do i=10 to 0 by -1 while(month=‘JAN‘);
3)do
while语句
n=0;
Do while (n<5);
Put n=;
n 1;
End;
4)do until 语句
n=0;
Do until(n>=5);
Put n=;
n 1;
End;
商业实战;
libname ch7 ‘f:\data_model\book_data\chapt7‘;
proc sort data=ch7.smooth;by cid month;run;
data smooth;
set ch7.smooth;
by cid;
array lags(12);
lags(1)=lag(balance);
do i=2 to 12;
do j=12 to 2 by -1;
if j gt cns then lags(j)=.;
put j=;
end;
if first.cid then do
cns 1;
mean6=mean(of lags1-lags6);
mean12=mean(of lags1 - lags12);
run;
计算每个客户在每个月前6个月和前12个月移动平均余额;
4.控制语句
continue语句和leave语句
data a;
do i=1 to 20;
sumx i;
if sumx le 15 then continue;
output;
end;run;
当sumx<15时跳出本次循环,因而最后返回的是最后的15条数据
data a;
do i=1 to 10;
sumx i;
if sumx gt 15 then leave;
output;
end;
run;
当sumx大于15时,结束循环,故只输出前5条数据
注:
continue停止当前循环继续下一次循环;
leave跳出当前循环,执行下一个sas语句;
continue值能在do循环中;
leave语句可以同do循环活select语句共同使用。
标签:if do continue leave retain
原文地址:http://blog.csdn.net/goodhuajun/article/details/39637375