SET用法

一、读入数据集:
从现有的数据集读入数据(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;
运行结果:
1Keep的使用:仅把keep选定的变量写入新生成的数据集。
Data work.aaa;
Set work.bbb(keep=custid  brand ) ;
Run;
运行结果:
2Drop 的使用:仅把除drop选定的变量以外的变量写入新生成的数据集。
Data work.aaa;
Set work.bbb(drop=fee  ) ;
Run;
运行结果:
3rename 的使用:在读入数据集时对变量进行重命名。
Data work.aaa;
Set work.bbb( rename=(brand=brand_new ) ) ;
Run;
运行结果:
4Where的使用:仅把满足条件的记录写入新数据集。
Data work.aaa;
Set work.bbb(where=(brand=3  and  fee >=200 ) ) ;
Run;
运行结果:
5Firstobsobs的使用在下例中,set语句将work.bbb的第2条到第5条记录写入work.aaa。
Data work.aaa;
Set work.bbb(firstobs=2  obs=5 ) ;
Run;
运行结果:
6end的使用: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;
运行结果:
7point的使用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;
运行结果:
8nobs的使用: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;
运行结果:
9In的使用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;
运行结果:
9key的使用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

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值