Merge 基本SAS证书示例:合并并输入

Merge 基本SAS证书示例:合并并输入,merge,sas,Merge,Sas,这个问题的正确选择是什么?为什么?谢谢: 提交以下程序: data WORK.ALL; merge WORK.EMP_NAME(in=Emp_N) WORK.EMP_DEPT(in=Emp_D); by Empid; if (Emp_N and not Emp_D) or (Emp_D and not Emp_N); run; 数据集中有多少观测值有效。全部 提交程序后? A.1 B.2 C.3 D.5 答案将是B.22个观察值,已

这个问题的正确选择是什么?为什么?谢谢:


提交以下程序:

 data WORK.ALL;
     merge WORK.EMP_NAME(in=Emp_N) 
           WORK.EMP_DEPT(in=Emp_D);
     by Empid; 
     if (Emp_N and not Emp_D) or (Emp_D and not Emp_N);
 run;
数据集中有多少观测值有效。全部 提交程序后? A.1 B.2 C.3 D.5

答案将是B.22个观察值,已经有3个变量,因此新数据集都将包含EMP_名称或EMP_DEPT列EmpID中都没有的观察值。图书馆实际上是为所有人服务的

该语句确实表明,在合并时只合并EmpID中常见/不存在的观察值。 Emp_N来自第一个数据集,Emp_D来自第二个数据集

希望下面的细节能有所帮助:


那么by子句是否被if子句覆盖?谢谢。在BY声明之后,有一个子集IF声明。因此,只有满足子集IF语句的观测值才会写入输出数据集。
 data WORK.ALL;
     merge WORK.EMP_NAME(in=Emp_N) 
           WORK.EMP_DEPT(in=Emp_D);
     by Empid; 
     if (Emp_N and not Emp_D) or (Emp_D and not Emp_N);
 run;
by Empid; 
 if (Emp_N and not Emp_D) or (Emp_D and not Emp_N); 
 title "stackoverflow merge EMP_DEPT";
data work.EMP_NAME;
input Name $ EmpID;
datalines;
Jill   1864
Jack   2121
Joan   4698
John   5463
;
run;


proc print data = work.EMP_NAME;
run;


title "stackoverflow merge EMP_DEPT";
data work.EMP_DEPT;
 input EmpID  Department $ ;
 datalines;
2121  Accounting
3567  Finance
4698  Marketing 
5463  Accounting
;
run;

proc print data = work.EMP_DEPT;
run;


*merge;

data WORK.ALL;
 merge WORK.EMP_NAME(in=Emp_N) 
       WORK.EMP_DEPT(in=Emp_D);
 by Empid; 
 if (Emp_N and not Emp_D) or (Emp_D and not Emp_N);
 run;

 proc contents data=work.ALL;

 run;

 proc print data = work.ALL;
 run;