1.数据合并
(1)利用set语句纵向合并
data 数据集;
set 数据集1(数据集选项)数据集2(数据集选项).....;
run;
说明:将若干个数据集纵向合并,并存放在data语句建立的数据集中;当set后面只有一个数据集时,就相当于复制的作用。当要合并的变量在不同数据集中变量类型不一致时,无法直接合并,需转换变量类型。
注意:data语句的作用是创建数据集,不是打开数据集。
两个非常实用的数据集选项:
set 数据集1(in=临时变量1)数据集2(in=临时变量2).....;
*当合并的记录属于数据集1,“临时变量1”的值为1,否则为0;临时变量不会在结果出显示,需赋值给新变量,即“新变量=临时变量”;
set 数据集1(rename=(原名1=新名1....)数据集2(rename=(原名2=新名2....)).....; *当变量在不同数据集中名不一样,则需重命名;
(2)利用Merge语句横向合并:
data 数据集;
merge 数据集1(数据集选项1) 数据集2(数据集选项2)....;
by 变量1 变量2 .....;
run;
说明:by语句指定索引(如:id); 如果数据集事先没有按索引变量(id)排序, 需先分别对各个数据集排序后才能合并。
*==合并ab1和ab2数据集的交集;
data ab;
merge ab1(in=d1) ab2(in=d2); /*产生标识两个数据集的临时变量ab1和ab2*/
by id;
if d1=1 and d2=1;
proc print;
run;
2.数据对比
proc compare <base=数据集1 compare=数据集2> <nosummary> <transpose>;
by 变量1 变量2 .......;
id 变量1 变量2 .......;
run;
说明:选项base和compare分别指定两个比较和被比较的数据集; “nosummary”:不显示一些概括性的结果;“transpose”按记录显y示不一致的结果,如不指定该选项,默认按变量显示不一致的结果。by语句:指定索引变量,避免错位;id语句:指定索引变量,可以让你方便地根据变量找到相应的观测,如不指定,默认结果只显示第几行;
proc compare base=ab compare=cd nosummsry transpose;
by id;
by id;
run;
3.查找异常值
一般式:
data 新数据集;
set 已有数据集;
if|where 条件语句;
proc print;
run;
示例:
data outline; data outline;
set dem.b1; set dem.b1;
if (gender not in(1,2)); where (gender not in(1,2));
proc print; proc print;
run; run;
IF和where的区别:
1.IF和where都可以应用:
set 有条件的复制数据集时,其后面紧跟的条件语句可以用IF或where。 但where运行更快,因where是在数据读入前就执行选择条件的,IF是在读入数据后执行。
2.只能用IF语句的情况:(只能用IF语句,不能用where)
(1)使用SAS自动变量时;
(2)当指定的条件变量是新产生的变量时;
3.只能用where语句的情况:(只能用where,不能用IF语句)
(1)当使用了某些特殊运算符时;
(2)当调用proc过程,只选择部分观测执行该过程时;
(3)当做数据集选项时,只能用where。
特殊运算符作用
between......and指定介于数值变量两个值之间的观测
contains "指定的字符”指定字符变量中包含指定字符的规则
like "指定的字符”指定字符变量中与指定字符相似的规则,
模糊部分可用%或_代替,其中%代表多个字符,_代表1个字符。
is null或 is missing指定包含缺失值的观测
like "_t_" 指查找变量长度为3且中间为“t”的观测;like "%t%" 查找任意含t的观测。
4.缺失值的填补
SAS主要通过proc mi过程来实现,mi是mutiple impuation(多重填补)的缩写。
proc mi <out=数据集> <round=> <mininum=> <maximum> ;
mcmc;
var 变量1 变量2.......;
run;
说明:“out=数据集”是把填补后的数据保存到自定义的数据集中;“round=”选项是指定填补值的小数位数,round=1表示保留只整数;“mininum”和“maximum”是指定填补值的最小值和最大值;
“mcmc”语句是采用马尔科夫链蒙特卡罗模拟方法来产生一个抽样分布,作为填补缺失值的填补技术; “var”指定哪些变量需要填补。
mcmc, Mrakov chain Monet Carlo.
SAS 默认产生5个填补完整的数据集,每个数据集的填补值都不同。可用proc mianalyze过程,对5次填补结果进行综合分析。
示例:
data b1_imputed;
set dem.b1;
run;
proc mi data=b1_imputed out=nomissing round=1 1 1 mininum=150 1 1 maximum=200 5 5;
mcmc;
var heigh y2 y4;
run;
proc print data=nomissing;
run;
缺失数据的更新
data 新数据集;
update 旧数据集 新数据集;
by 索引变量;
run;
网友评论