在sas的一个数据步骤中创建两个数据集

在sas的一个数据步骤中创建两个数据集,sas,Sas,这应该很简单,但不知何故我把自己搞糊涂了 data in_both missing_name (drop = name); merge employee (in=in_employee) hours (in = in_hours); by ID; if in_employee and in_hours then output in_both; else if in_employee and not in_hours then o

这应该很简单,但不知何故我把自己搞糊涂了

data in_both 
   missing_name (drop = name);

   merge employee (in=in_employee)
         hours (in = in_hours);

         by ID;

   if in_employee and in_hours then output in_both;
   else if in_employee and not in_hours then output missing_name;

run;
我有两个问题: (1) :对于第一个语句“missing_name(drop=name)”,我理解,它意味着保留除标题为name的列之外的所有数据。但是在这里保存哪些数据呢?输入是什么? (2) :我知道我们可以在一个数据步骤中创建两个数据集,但这意味着我们应该使用“数据中都缺少名称”,而不是“数据中都缺少名称”,对吗


非常感谢您的时间和关注。我感谢你的帮助

DATA语句确定数据步骤将创建哪些数据集。数据集选项,如示例中的
DROP=
选项,可用于控制哪些变量写入这些数据集中

正是
OUTPUT
语句决定了要编写哪些观察结果。因此,在您的示例中,IF/THEN/ELSE逻辑决定要执行哪些输出语句。

(1)
DROP=
选项指的是从缺少名称的数据集中删除变量。如果没有
drop=
keep=
选项,员工或工时中存在的所有变量都将写入缺少的_名称。您可以在四个数据集中运行PROC内容,以查看每个数据集中包含哪些变量


(2) 正如所写的,您的代码将输出两个数据集,它们都是\u,并且缺少\u名称。正如@Tom刚才所评论的,您当前的
DATA
语句已经列出了这两个数据集,因为分号结束了语句,而不是空格/回车。

使用您发布的代码:

data in_both 
   missing_name (drop = name);
   merge employee (in=in_employee)
          hours (in = in_hours);
         by ID;
run;
输入-合并员工和工时 输出-两个都在\u中&缺少\u名称

在本例中,缺少_名称的输出会删除列名


如果换行符令人困惑,查看发生了什么的最好方法是查找分号。乍一看,我也有点困惑

因此,在我的示例中,我只创建了一个数据集,其名称在_both?No中。您创建了两个数据集,因为您在
data
语句中列出了两个数据集。如果您试图引用
输出
语句中未在
数据
语句中定义的数据集,则SAS将生成一个错误。标记
数据
语句结尾的分号。因此,我猜“DATA in_both”意味着我们将创建一个名为“in_both”的新数据集?“数据都在\u中缺少\u名称”意味着我们将创建两个分别名为“都在\u中”和“缺少\u名称”的数据集?在这里,缺少的_name数据集已经存储在库中的某个位置。所以,我们使用“两个都有数据”?是的,
两个都有数据(注意分号)将创建一个名为“in_tware”的数据集。是,\u中的
数据都缺少\u名称
将创建两个名为“in_both”和“missing_name”的数据集。这是一个以空格分隔的要创建的数据集名称列表。这两个数据集将在每次运行代码时创建。如果它们已经存在,将被覆盖。仔细看日志记录。它们解释了读取了多少记录、写入了多少记录、写入了哪些数据集以及有多少变量。对于理解合并非常有用。