纵向合并set
利用set语句实现两个或多个数据集的纵向合并
在纵向合并中,不管有无共同变量,合并的数据集的数据均会显示,只不过在set关键词后,哪个数据集在前会优先显示哪个数据集。
/*练习1: 把文件夹中class1数据和class2数据纵向合并起来*/
data study.class12;
set study.class1 study.class2;
run;
proc print data=study.class12;
run;
/*ERROR: Variable weight has been defined as both character and numeric.两个表中的weight是不同类型的变量*/
data study.class12;
set study.class1 study.class2(rename=(weight=wweight));
run;
proc print data=study.class12;
run;
class1
class2
class12
/*练习2: 把文件夹中class1数据和class3数据纵向合并起来,用两种方式实现(class1和class3互换位置)观察效果*/
data study.class13;
set study.class1 study.class3;
run;
proc print data=study.class13;
run;
/*WARNING: Multiple lengths were specified for the variable weight by input data set(s). This can cause truncation of data.
WARNING: 输入数据集为变量“weight”指定了多个长度。这会造成数据截断。
数据截断class1中weight比class3的长度短得多*/
data study.class31;
set study.class3 study.class1;
run;
proc print data=study.class31;
run;
class3
class31
class13
交叉合并set by
交叉合并需要根据by后面的变量进行排序
横向合并merge
数据集的横向合并是通过merge实现的。在无缺失值的观测中的共同变量显示merge语句的最后一个数据集的共同变量的值,有缺失值的显示该变量观测的共同变量值。
/*练习3: 把文件夹中class1数据和class4数据横向合并起来*/
data study.class14;
merge study.class1 study.class4;
run;
proc print data=study.class14;
run;
class4
class14
匹配合并merge by
数据集的一对一、一对多合并可以利用merge by来实现,数据集会根据by后面的变量进行合同。
在没有共同变量的情况下,set by的操作结果与merge by的操作结果是相同的。
/*练习4: 把文件夹中class1数据和class4数据横向合并起来,使得每个受试者的weight和height一一对应*/
data study.class41;
merge study.class1 study.class4;
by name;
run;
proc print data=study.class41;
run;
class41