SAS笔记121022

SAS中只有两种数据类型,字符和数据,没有布尔型。因此要用到时用0和1表示。

示例程序:打印1000以内的素数:

 1
 
 data _null_;
 2 file print;
 3 put "Prime Nums in 1 to 1000:";
 4 put "2 " @;
 5 do i= 3 to 1000 by 2;
 6     IsPrime = 1;
 7     do j=3 to sqrt(i);
 8         if mod(i,j)=0 then do
 9             IsPrime = 0;
10             leave;
11         end;
12     end;
13     if IsPrime = 1 then put i @;
14 end;
15 run;

SAS中有各种函数可用。例如求两个日期之间的间隔可用INTCK(int,from,to)函数:

1 data _null_;
2     file print;
3     int_d=intck('day','25Jun1992'd,'1Jan2000'd);
4     put int_d;
5 run;

再例如,生成自由度1-100的t分布分位数表到文件't_out.txt':

 1 data _null_;
 2     file 't_out.txt';
 3     array PV(8) (0.001,0.002,0.005,0.01,0.02,0.05,0.10,0.20);
 4     5 
 6     do i=1 to DIM(PV);
 7         put PV(i) 14.3 @;
 8     end;
 9 
10     put;
11 
12     do n = 1 to 100;
13         do i=1 to DIM(PV);
14             tmp = TINV(PV(i)/2,n);
15             put tmp 14.3 @;
16         end;
17         put;
18     end;
19 run;

 

SAS数据步中的隐式循环:

当data step中有以下涉及数据读入语句时,将出现隐式循环结构:

INPUT, SET, UPDATE, MERGE, MODIFY等。

循环重复执行从data句和run句之间的整个step,直到无数据可读时退出循环。INPUT读入时将在每次循环初置所有变量为缺失值,Retain变量和临时数组除外。

SET/UPDATE/MERGE等语句不重置变量。

两个特殊变量:
_N_:本轮循环计数器
_ERROR_:本轮循环出错则记为1

 


 

posted @ 2012-10-22 00:59  hilbertan  阅读(377)  评论(0编辑  收藏  举报