SAS语言的作用

如题所述

SAS是一种专用的数据处理、统计计算语言,但是它也包含一般的高级语言编程能力并扩充了许多数学、统计等方面的函数。
SAS语言的编程计算能力主要由SAS数据步提供。DATA语句以关键字DATA 开头,后面给出一个数据集名,例如:
data out1;
则在本数据步要生成的数据集,其名字为out1。我们也可以省略数据集名,这时SAS自动生成一个临时数据集名。也可以使用特殊名字_NULL_ ,表示本数据步不生成数据集。
一赋值语句
在SAS中用赋值语句计算一个值并存放到变量中。
格式为
变量名 = 表达式;
例如:
avg = (math + chinese)/2;
isfem = (sex='女');
y=sin(x)**2;
newv = .;
其中第一个赋值语句用一个公式计算平均分数。第二个生成一个取值为0或1的变量,性别为女时为1,否则为0。第三个使用了正弦函数和乘方运算。第四个给变量赋了缺失值。
二输出语句
SAS数据步的输出一般是数据集,用赋值语句计算的结果会自动写入数据集。SAS也提供了一个PUT语句用于立即打印输出结果。
PUT语句的语法:
PUT 输出项表
输出项表中只能是变量或字符串,项间用空格隔开。如:
data;
x=0.5;
y=sin(x);
put 'Sine function value of ' x 'is ' y;
run;
结果将在运行记录窗口显示一行
Sine function value of 0.5 is 0.4794255386
PUT说明
⒈在PUT语句中,若在变量名后加“=”,则指定输出项可以显示带有变量名的输出结果。
比如把上程序中的PUT语句改为
put x= y=;
则结果在LOG窗口显示为
X=0.5 Y=0.4794255386
⒉指定变量输出项的具体列位置及小数位数
绝对位置格式:
变量 起始列-结束列.小数位数
比如,
put x 10-20 .6 y 30-40 .6;
指定把X数值显示在第10-20列,保留6位小数,把
Y数值显示在第30-40列,保留6位小数。
在指定的列位置内,数值型数据靠右对齐,字符型
数据靠左对齐。变量为整数值或者字符型则不指定
小数位数。
相对位置格式:
变量 宽度.小数位数(用于数值型)
变量 $宽度.(用于字符型)
如:put x 20.8 y 20.8; 使X占用第1-20列,8位小数,右对齐;Y占用第21-40列,8位小数,右对齐。
而put name $10.;使name占用10列。
输出占位不满指定宽度时,数值型数据向右对齐,字符型数据向左对齐。
⒊如果希望PUT语句的输出不产生换行,使下一个PUT的结果可以显示在同一行,只要在PUT 语句结尾处加一个@符。
PUT语句的输出结果缺省情况下被送到运行记录窗口。若在PUT语句之前用FILE语句可以改变PUT语句的输出目的地。如,在PUT语句之前用file print;可以把PUT语句的输出转向到输出窗口。在FILE语句中指定一个包含文件名的字符串可以把PUT语句的输出转向到此文件中。比如file 'tmp.out';输出文件把后续的PUT语句输出转向到当前工作目录下的文件“tmp.out”中,生成tmp.out 。注意当前工作目录在SAS状态栏的右方显示,双击可以更改。文件名也可以指定全路径,比如“C:\SAS\TMP.OUT”。
三分支结构
⒈if...then...else 结构
⒉SELECT结构
1. if...then...else 结构
格式为:
IF 条件 THEN 语句;
ELSE 语句;
例: data temp1
input x @@;
if x>0 then put x '是正数';
else put x '是负数';
cards;
1 2 -3 4 -5
;
run;
有时我们在条件成立时需要进行的操作无法用一个语句完成,这时可以使用SAS提供的复合语句功能。例:
data;
input x@@; /*不分行符@@的使用:每读入一天记录后,数据指针保持原位不换行,
继续读下一条记录*/
if x>0 then do;
y=2*x;
put 'f(' x ')=' y;
end;
else put 'Data Error!';
cards;
1 2 -3 4 -5
;
run;
如果当条件不成立时,不进行什么操作,可以不使用ELSE及其后面的语句。
2.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;
四循环结构
⒈计数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;

温馨提示:内容为网友见解,仅供参考
无其他回答
相似回答