SAS学习之查找异常值

1.查找缺失值的万能程序

data missing;
set sasuser.xb;
array cha[*] _character_  \*利用*好不指定cha数组中的字符型变量个数*\
do i=1 to dim(cha);       \*指定循环次数为数组cha中的元素数*\
if missing(cha[i]) then output;
end;
array num[*] _numeric_;\*利用*号不指定num数中的数值型变量个数*\
do i=1 to dim(num);    \*指定循环次数为数组num中的元素数*\
if missing(num[i]) then output;
end;
proc print;
run;

cha[*]和num[*]的意思是建立数组cha和num,但不指定数组中的元素数,具体有多少个由SAS根据变量来自己判断。

dim()函数是专门针对数组的函数,它的作用是返回指定数组所含的元素个数。如指定数组array x[*]a b c,则dim(x)返回值为3.

2.查找异常值

基本格式为:

data 新数据集;

set 已有数据集;

if|where 条件语句;

proc print;

run;

这几句语句的意思是建立一个新数据集,然后利用set语句把所有的数据集复制进来,但并非全部复制,而是根据if或where语句指定的条件,仅复制符合条件(如缺失或异常等)的记录。

**if和where的区别

1)if和where都可以使用的场合

在利用set语句有条件地复制数据集时,set后紧跟着条件语句,此时用if和where都可以。但where的运行速度要快一点。

2)只能用if的几种场合

使用SAS的自动变量时;如果指定的条件变量是新产生的变量,只能用if,不能用where。

3)只能用where的几种场合

当使用某些特殊运算符时(between…and,contains);当调用某一proc过程时,如果要选择部分观测执行该过程,只能用where语句,不能用if语句。

还有当做数据集选项使用时,只能用where,不能用if。

3.查找异常值的万能程序

%let data=sasuser.xb;
%let id=id;
%macro outline(var=,low=,high=);
data outline;
set &data.(keep=&id. &var.);
length variable $20. reason $20.;
variable="&var.";
value=&var.;
if &var.<&low. and not missing(&var.) then do;
reason="过低";
output;
end;
else if &var.>&high. and not missing (&var.) then do;
reason="过高";
output;
end;
drop &var.;
proc append base=outliner1 data=outline;
run;
%mend outline;
%outline(var=height,low=150,high=200);
%outline(var=weight,low=40,high=100);
%outline(var=y1,low=1,high=5);
%outline(var=y2,low=1,high=5);
%outline(var=y3,low=1,high=5);
%outline(var=y4,low=1,high=5);
%outline(var=y5,low=1,high=5);
proc print data=outliner1;
run;

需要修改的地方:第一行的数据集;第二行的id变量;最后几行的7个outline。

你可能感兴趣的:(SAS)