一、读入数据集:
从现有的数据集读入数据(obs) ,下例中set将work.a的所有记录写入work.new ;其作用相当于复制数据集a:
data new ;
set a ;
run;
二、合并数据集 :
1、一个set的应用,纵向合并数据集 :
a) 2个数据集的字段完全相同的情况下:
数据集a:
数据集b:
data new1 ;
set a b ;
by custid;
run;
运行结果:数据集new1
b) 2个数据集的字段不完全相同的情况下:
数据集a:
数据集b:
data new2 ;
set a b ;
by custid;
run;
运行结果:数据集new2
c) 2个数据集的字段完全不同的情况下:
数据集a:
数据集b:
data new3 ;
set a b ;
run;
运行结果:数据集new3
2、两个set的应用:用2个set进行数据集的拼接时,新生产数据集(new)的记录条数为2个数据集的最小值;
a) 当2个数据集的字段都不相同情况下:
新生产的数据集包含2个set数据集的所有变量,第2个set数据集(b)的变量排在第1个数据集(a)的右边,如下例:
数据集a:
数据集b:
data new;
set a;
set b;
run;
运行结果:数据集new
b) 当2个数据集有相同字段(custid)情况下:
第2个数据集(b)custid的值覆盖第1个数据集(a)custid的值,新生产数据集new2一共包含2条记录,如下例:
数据集a:
数据集b:
data new2;
set a;
set b;
run;
运行结果:数据集new2
三、Set命令的常用options :
程序举例使用数据集:
Data work.bbb;
Input custid brand fee;
Cards;
1000123 1 300
1000124 2 200
1000134 3 500
1000139 2 100
1000213 3 200
;
Run;
运行结果:
Data work.ccc;
Input custid brand fee ;
Cards;
1000126 1 900
1000125 2 800
1000127 1 200
1000128 2 300
;
Run;
运行结果:
1、Keep的使用:仅把keep选定的变量写入新生成的数据集。
Data work.aaa;
Set work.bbb(keep=custid brand ) ;
Run;
运行结果:
2、Drop 的使用:仅把除drop选定的变量以外的变量写入新生成的数据集。
Data work.aaa;
Set work.bbb(drop=fee ) ;
Run;
运行结果:
3、rename 的使用:在读入数据集时对变量进行重命名。
Data work.aaa;
Set work.bbb( rename=(brand=brand_new ) ) ;
Run;
运行结果:
4、Where的使用:仅把满足条件的记录写入新数据集。
Data work.aaa;
Set work.bbb(where=(brand=3 and fee >=200 ) ) ;
Run;
运行结果:
5、Firstobs和obs的使用:在下例中,set语句将work.bbb的第2条到第5条记录写入work.aaa。
Data work.aaa;
Set work.bbb(firstobs=2 obs=5 ) ;
Run;
运行结果:
6、end的使用:end=var定义一个变量var表示一条记录是否为最后一条记录,变量var的值初始化为0,当遇到到最后一个数据集的最后一条记录时值为1。下例运行结果:仅将work.bbb的最后一条记录写入数据集work.fff,因此,wrok.fff只包含1条记录。
data work.fff;
set work.bbb end=last ;
if last then output;
run;
运行结果:
7、point的使用:point=var定义一个指针变量var;下例中定义指针变量i ,运行结果:读取work.ccc的第1和第3条记录写入work.fff。
data work.fff;
do i=1 to 4 by 2;
set work.ccc point=i;
output;
end;
stop;
run;
运行结果:
8、nobs的使用:nobs=var定义一个变量,该变量的值是所有输入数据集记录条数的总和;下例中nobs=last定义一个变量last,其值等于work.bbb和work.ccc记录条数的总和。
data work.aaa;
do i=1 to last by 2 ;
set work.bbb work.ccc point=i nobs=last;
output;
end;
stop;
run;
运行结果:
9.In的使用:in=var 定义一个变量标识读入的一条记录来自哪个数据集,下列程序可实现两个数据集叠加起来之后生成一个新字段datasets_flag来表示记录的来源(数据集),便于筛选。
Data aaa ;
set bbb(in=a) ccc(in=b);
if a=1 then datasets_flag="bbb";
if b=1 then datasets_flag="ccc";
run;
运行结果:
9、key的使用:key=index 根据定义的索引对数据集进行merge,下列程序根据索引custid进行merge,并生成一个标志flag来表示匹配是否正确。
Data work.a( index=(custid) ) ;
Input custid brand fee;
Cards;
1000123 1 300
1000124 2 200
1000134 3 500
1000139 2 100
1000213 3 200
;
Run;
数据集a:
Data work.b( index=(custid) ) ;
Input custid time ;
Cards;
1000123 300
1000125 450
1000139 260
1000213 370
;
Run;
数据集b:
data new ;
set work.a ;
set work.b key=custid ;
if _error_ =1 then flag='wrong';else flag='right';
run;
运行结果,数据集new:
文章转载:http://www.dataguru.cn/thread-16872-1-1.html