Press "Enter" to skip to content

SAS 数据集操作

本站内容均来自兴趣收集,如不慎侵害的您的相关权益,请留言告知,我们将尽快删除.谢谢.

这个是当初最开始学习用SAS的时候做的笔记,现在再次看到有点亲切和熟悉,初学者看书做笔记的感觉。。。

 

回过头看,这些非常基础的用法缺是平时用的最多的代码。

 

Set用法

 

 

set-keep联合 提取特定变量

 

/*set-keep-挑选变量*/ data keep;
 set sashelp.class(keep=name sex);    
 /*查看数据,sashelp逻辑库的class数据集,keep相当于 class[,c("name","sex")]   keep代表提取元素,而drop代表剔除元素*/ run;

 

set-rename 修改变量名称

 

/*set-rename-修改变量名称*/ data keep;
 set sashelp.class(keep=name sex rename=(name=name_new sex=sex_new));
 run;

 

set-where 条件选择

 

/*set-where-按条件选中*/ data keep;
 set sashelp.class(keep=name sex where=(sex='M'));    
 run;

 

set-in 临时变量

 

/*set-in-临时单个变量*/ /*可以说是SAS跟R最大的区别的一点就是,SAS内容都是不直接放在内存之中,而是放在数据集中,如果要对数据集的内容进行一些操作,需要先赋值成一些临时变量*/ data keep;
 set one(in=a) two(in=b); 
 /*one变量变成临时变量a,two变量变成临时变量b,同时合并one two变量*/ in_one=a;
 in_two=b;
 /*将临时变量a b 赋值新变量名称in_one、In_two*/ if a=1 then flag=1;else flag=0;
 /*构造一个新变量flag,为满足某种条件*/ run;

 

set-nobs 计总数

 

/*set-nobs-数据总数,譬如nrow的意思*/ data nobs11(keep=total);
 set sashelp.class nobs=total_obs;
 /*将class数据集通过nobs转给临时变量total_obs,然后传给实际变量total,再传出*/ total=total_obs;
 output;
 stop;
 run;

 

利用nobs=total_obs,以及total=total_obs的操作来计数。 先用函数obs计数,然后传给临时变量total_obs放入缓存,缓存内容需要再传导给实际变量total。

 

此外,注意还有output+stop代表单独输出为数据表,而stop的意思是停留在一个单元格,不然就会生成19*1的一列数值,里面都填充着数字19。

 

数据集合并——横向合并,obs这里表示取前10行

 

/*set-数据集合并*/ data concatenat;
 set sashelp.class sashelp.class(obs=10);
 /*横向合并,同时sashelp.class(obs=10)代表切片*/ run;

 

 

merge用法——横向合并

 

/*merge 横向合并*/proc sort data=chapt3.merge_a;by=x;run;
proc sort data=chapt3.merge_c;by=x;run;
 
data d;
merge chapt3.merge_a chapt3.merge_c;
by x;
run;

 

SAS合并需要预先进行一些内容的排序,才能进行合并。

排序:proc sort data=逻辑库.数据集; by=变量名称;run;
合并:merge 数据集1 数据集2;by x;

注意这里合并需要by,同时By是作为单独的代码。

 

where 按条件选择

 

 

    1. where-between/and

 

 

前面set和where联用可以得到比较好的效果。还有一些可能:

 

Where x between 10 and 20;/* X[10,20] */Where x not between 10 and 20;
Where x between y*0.1 and y*0.5;
where x between 'a' and 'c';

 

where-between/and可以作为切片的一种。同时数据集(obs=10)也是切片的一种方式。

 

where x in(1,2);
/*选择变量等于某值的情况*/

 

选择变量服从某些特征的。

 

 

where在缺失值的应用

 

/where选中缺失值
/ Where x is missing; where x is null; /* 数值型变量,定位缺失值,is.na()*/

 

 

有点像R中的is.na()函数。

 

Where x;/*选择数值变量x非0非缺失值的观测值*/Where x and y; /*字符型变量,选择观测值*/Where x ne '';

 

还有一些比较特殊的写法,譬如where x就直接代表选中了非0非缺失值的数据,比较方便。x ne ”代表,x不等于空格。

 

 

where选中字符型

 

where x like ‘D_an’; where x like ‘%ab%’ or x like ‘%z%’; /字符型匹配,下划线代表一个字符,%代表可以有很多字符
/

 

 

跟SQL里面一样用like来定位字符型内容。其中需要注意的是,D_an代表D和an其中可以容纳一个字符;而D%an代表D和an中可以容纳多个字符。

 

append函数——横向合并、添加

 

/*append base= data= force 语句*//*base是元数据集,data需要添加在后面的数据集,force是强行添加,不太用*/proc append base=null data=sashelp.class(where=(sex='M'));run;

 

利用proc append来启动函数,proc append base=基础数据集 data=添加数据集

 

参考资料:SAS︱数据索引、数据集常用操作(set、where、merge、append)

Be First to Comment

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注