1、创建并重新定义变量
基本形式:variable=expression
variable是变量名,expression可以是常量、其他变量、或者数学表达式(遵循运算法则:先算指数、再算乘除、之后是加减,可以用括号改变运算等级)。
data a;
input id fruit $;
cards;
1 apple
2 banana
3 cherry
;
run;
data b;
set a;
id=id+1;/*重新定义变量id*/
sign="healthy";/*创建新变量sign*/
run;
A:
B:
2、使用SAS函数
SAS函数400多个,涵盖类别如下:
基本形式:
function-name(argument,argument,...); 所有的函数都需要括号,即使没有参数。
函数可以嵌套。
例子:
birthdat=MDY(Month,Day,Year);
NewVal=INT(LOG(10));
每个类别的函数的使用将另开专题讲解。
3、使用IF-THEN语句
条件语句IF-THEN的基本形式为:IF 条件 THEN 执行;
符号 | 替代写法 | 含义 |
= | EQ | equals |
^=、~= | NE | not equal |
> | GT | greater than |
< | LT | less than |
>= | GE | greater than or equal |
<= | LE | less than or equal |
in | equal in a range |
(1)一个条件一个执行:
IF condition THEN action;
(2)一个条件多个执行:(借助DO和END关键字)
IF condition THEN DO;
action;
action;
END;
(3)ELSE IF语句:(使用else要确保条件之间互斥,该语句可以将观测值分组)
IF condition THEN action;
ELSE IF condition THEN action;
ELSE IF condition THEN action;
ELSE action;
扩展:
IF condition THEN DO;
action;
action;
END;
ELSE IF condition THEN DO;
action;
action;
END;
(4)IF语句构造子集
IF expression; 比如:IF sex='f';/*取数据集中的部分数据*/
IF expression THEN delete; 比如:IF sex='m' THEN delete;/*删除某些数据*/
可以使用AND和OR来定义多个条件
符号 | 替代写法 | 含义 |
& | AND | 所有条件都为true |
|、! | OR | 至少有一个条件为true |
4、处理SAS的日期数据
SAS处理日期数据的三个工具为:读取数据的informats,使用数据的函数,打印数据的formats。
- 读取日期数据用formatted input,例如:input Birthdat MMDDYY10.;
- SAS日期函数使得操作大大简便,例如:today()返回今天的日期;
- 打印日期数据时,需要将数值换成日期,例如:format Birthdat WEEKDATE17.;
备注:将日期当做常数来使用,可通过在表达式中加入引号和字母D。
Dat='22APR2005'D;
可选择的Date Informats,Functions和Formats如下:
解释 | 例子 |
![]() | ![]() |
![]() | ![]() |
![]() | ![]() |
5、使用retain和sum语句
retain语句可以让SAS保留前一次变量的值,它可以出现在数据步的任何位置。
retain variable-list;
也可以指定一个初始值,而不是用缺失值或前一次的值代替初始值。
retain variable-list initial-value;
sum语句用于将一个表达式的值累加到一个变量上去。
variable+expression;
将表达式的值赋值给变量,同时将变量的值保留到下一次迭代。变量必须是数值型,且初始值为0
等价于→
retain variable 0;
variable=SUM(variable,expression);
举个例子:
/*计算某个人语数英三门成绩的最大值和总分*/
data sample;
input course:$20. score $;
cards;
English 88
Math 90
Chinese 75
;
run;
data sample1;
set sample;
retain maxscore;/*retain没有为变量指定初始值,默认初始值为缺失值*/
maxscore=max(maxscore,score);/*自动保留上一次maxscore的值*/
totalscore+score;/*相当于retain totalscore 0; totalscore=totalscore+scroe; 保留上一次totalscore的值*/
run;
6、用数组简化程序
变量太多时,借助数组简化程序。数据是一组变量的集合。
(1)基本形式:
array name(n) $ variable-list;
/*name是数组名,n是变量数,()可以用[]和{}代替,如果变量是字符串,则需要$;变量名按顺序排列*/
例如:
array store(4) Macys Penneys Sears Target
/*store(1)是Macys,store(2)是Penneys,store(3)是Sears,store(4)是Target*/
(2)命名规则
data score;
input name $ Chinese $ Math $ English $;
cards;
France 100 99 Na
Kimmy 99 88 55
Alice 88 Na 99
;
run;
data score1;
set score;
array course(3) $ Chinese Math English;
do i=1 to 3;
if course(i)='Na' then call missing(course(i));/*将成绩为'Na'的置空*/
end;
run;
备注:数组没有被保存在数据集中,序号i被保存在数据集中啦,i是新创建的变量。