SAS讲义-第九课

  • 格式:doc
  • 大小:49.00 KB
  • 文档页数:5

下载文档原格式

  / 16
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

SAS讲义-第九课

一、Do循环

1、大家回看第四课的例11,可以发现Do循环应该要和End搭配使用。下面都是可行的Do语句。

do i=5;

do i=2,3,5,7;

do i=1 to 100;

do i=1 to 100 by 2;

do i=100 to 1 by -1;

do i=1 to 5,7 to 9;

do i=’01jan99’d,’25feb99’d;

do i=’01jan99’d to ‘01jan2000’d by 1;

例1 产生1,2,9,8 的序列。

data a;

do i=1,2,9,8;

output;

end;

run;

思考:若output放在end之后,或者去掉output,那会怎样呢?

例2 产生1-20的奇数序列。

data a;

do i=1 to 20 by 2;

output;

end;

run;

例3 求1-100的自然数之和。

data a;

do i=1 to 100 ;

n+i;

output;

end;

run;

例4 求1-100的自然数的平方和。

data a;

do i=1 to 100 ;

n+i**2;

output;

end;

run;

例5用do循环处理数组。(下课还会深入说数组)

data a(drop=i);

array day{7} d1-d7;

do i=1 to 7;

day{i}=i+1;

end;

run;

2、do while语句。先判断while表达式,若成立则执行,否则推测循环。例6

data a;

n=0;

do while (n<5);

n+1;

output;

end;

run;

例7 计算1加到100的过程中,第一个大于等于2000的数。

data a;

do i=1 to 100 while (n<2000) ;

n+i;

output;

end;

run;

3、do until 语句。先执行,直到until的表达式为真,推出循环。

4、do over 语句。我们到下课再说。

二、select语句。

Select-when 相当于一般编程语言里面的swich-case语句。直接看例子。例8 data a;

set resdat.class;

x=0;

obs=_n_;

select(obs);

when(2) x=2;

when(3,7)x=5;

otherwise x=3;

end;

run;

三、return语句。

Return语句可以让系统返回到data步开头。

例9return语句与if-then共用

data a;

input x y z;

if x=y then return;

s=x+y;

cards;

1 2 3

2 2 3

;

run;

分析:默认情况下,系统将每条观测读入到数据集a,可是当x=y时,return 语句被执行,也就是s=x+y没有被执行,那么s即为空值。思考,如果在s=x+y 语句后面增加一条output,又会怎样呢?此时要考虑一旦有了output,run本身的输出功能消失了。

例10 return语句与Do循环语句共同使用。

data a;

input a b c @@;

do x=1 to 5;

ax=a*x;

if ax>b then return;

output;

end;

cards;

1 2 3 2 6 8

;

run;

分析:由于Do循环包含了output,一个输入数据行本来可以生产5条观测,可是在循环中增加了return。也就是,当ax>b,系统执行return语句,没有执行output语句。

练习10某人将500元存入在某银行的存款账户,这个账户利率为7%,每年计息一次。用累加语句和循环语句计算三年末此人能得多少钱。

下面的练习仅供大家参考学习,不作练习。

练习11 given the SAS data set SASDATA.TWO:

X Y

-- --

5 2

3 1

5 6

The following SAS program is submitted:

data SASUSER.ONE SASUSER.TWO OTHER;

set SASDATA.TWO;

if X eq 5 then output SASUSER.ONE;

if Y lt 5 then output SASUSER.TWO;

output;

run;

What is the result?

A.

data set SASUSER.ONE has 5 observations

data set SASUSER.TWO has 5 observations

data set WORK.OTHER has 3 observations

B.

相关主题