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

时间:2015-11-12 14:51:48

标签: 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 output missing_name;

run;

我有两个问题: (1):对于第一个语句" missing_name(drop = name)",我理解,这意味着保留除头部名称的列以外的所有数据。但请保留哪些数据?输入是什么? (2):我知道我们可以在一个数据步骤中创建两个数据集,但这意味着我们应该使用"数据in_both missing_name"而不是"数据in_both",对吧?

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

3 个答案:

答案 0 :(得分:0)

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

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

答案 1 :(得分:0)

(1)DROP=选项是指从数据集MISSING_NAME中删除变量。如果没有drop=keep=选项,则EMPLOYEE或HOURS中存在的所有变量都将写入MISSING_NAME。您可以在四个数据集上运行PROC CONTENTS以查看每个数据集中包含哪些变量。

(2)如上所述,您的代码将输出两个数据集IN_BOTH和MISSING_NAME。正如@Tom刚评论的那样,您当前的DATA语句已经列出了两个数据集,因为分号结束了语句,而不是空格/回车符。

答案 2 :(得分:0)

使用您发布的代码:

data in_both 
   missing_name (drop = name);
   merge employee (in=in_employee)
          hours (in = in_hours);
         by ID;
run;

输入 - merge_employee&小时 输出 - in_both& missing_name

在此示例中,输出missing_name的列名为NAME。

查看换行时发生的事情的最佳方法是查找分号。乍一看我也有点困惑!