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