SAS语句和SAS数据集选项之间的区别(DROP、KEEP)

SAS语句和SAS数据集选项之间的一些区别

  1. 在代码中的位置
  • SAS语句出现在DATA步代码中的任何地方。

  • 数据集选项只出现在Data语句或输入语句(如SET、MERGE或UPDATE)中。

  1. 应用范围
  • SAS语句适用于在DATA步中创建或读取的所有数据集。

  • 数据集选项仅应用于其附加的数据集。

  1. 何时生效
  • SAS语句DROP、KEEP和RENAME在输出时生效。WHERE语句在从输入数据集读取数据时生效。

  • 如果在输出数据集上指定了数据集选项,则在输出时生效;如果在输入数据集上指定了数据集选项,则在输入时生效。

相关的关键字有:DROP、KEEP、WHERE和RENAME。本篇主要想聊一下DROP和KEEP。


  • 如果在同一个DATA步中同时使用了DROP和KEEP,则DROP优先生效。

  • 如果没有指定DROP或KEEP,PDV中除自动变量和临时变量外的所有变量将被写入数据集。

  • DROP=和KEEP=数据集选项也是如此。

  • DROP和KEEP语句或数据集选项出现的顺序并不重要。

DROP和KEEP应用场景举例

  1. 示例1:在输入数据集中使用DROP=和KEEP=数据集选项
/*****示例1:在输入数据集中使用DROP=和KEEP=数据集选项*****/
data class_a;
  set sashelp.class(drop=name keep=name);
run;

示例1的输出数据集class_a包含0个变量,因为在输入时DROP=删除了变量name,而KEEP=有效地删除了除变量name之外的所有内容,导致SAS从数据集sashelp.class中读取0个变量。

  1. 示例2:使用DROP和KEEP语句
/*****示例2:使用DROP和KEEP语句*****/
data class_b; 
  set sashelp.class; 
  drop name; 
  keep name; 
run;
/*************************************************************************
WARNING: The variable name in the DROP, KEEP, or RENAME list has never been referenced.
***************************************************************************/

DROP和KEEP语句在退出时被执行。生成警告是因为变量name在被KEEP语句保存之前被DROP语句删除了。

如果在示例1中对输出数据集而不是输入数据集使用数据集选项,则会出现相同的消息。

  1. 示例3:在输出数据集中使用DROP=和KEEP=数据集选项
/*****示例3:在输出数据集中使用DROP=和KEEP=数据集选项*****/
data class_c(drop=name keep=name);
  set sashelp.class; 
run; 
/*************************************************************************
WARNING: The variable name in the DROP, KEEP, or RENAME list has never been referenced.
***************************************************************************/

示例4:其他

/******
乍一看,class1应该包含变量name。
但由于drop语句作用于所有输出数据集(class1和class2),所以class1和class2这两个输出数据集中的变量个数都是0。
******/
data class1 class2;
  set sashelp.class(keep=name);
  output class1;
  drop name;
  output class2;
run;
/******
drop=数据集选项只作用于输出数据集class2。
keep语句作用于所有输出数据集(class1和class2)。
******/
data class1 class2(drop=name);
  set sashelp.class
  keep name;
  output class1;
  output class2;
run;

试图总结的一些规律

(其实是一些重复且啰嗦的话,希望能有助于理解。)

  1. DROP语句
  • DROP语句指出PDV中的哪些变量不应该写入输出SAS数据集。

  • DROP语句在写入输出数据集时生效(在输出时)。

  • 一个DROP语句应用于DATA步中的所有输出数据集,并且可以在数据步骤中的任何地方使用。

  • 在一个DATA步中可以使用多个DROP语句。所有这些都将应用于输出数据集。

  • DROP语句中列出的所有变量都在PDV上,可用于当前DATA步,直到输出为止。

  1. DROP=数据集选项
  • 在输入数据集上使用时,DROP=数据集选项指定了哪些变量不从数据集读取到PDV(在进入过程中)。

  • 在输出数据集上使用时,DROP=数据集选项指定了哪些变量PDV不写入输出数据集(在输出过程中)。

  • 必须为所有数据集选项指定其应用的数据集。

  • 多个DROP=数据集选项可用于同一个数据集。

  1. KEEP语句
  • KEEP语句指出PDV中的哪些变量应该写入输出SAS数据集。

  • KEEP语句在写入输出数据集时生效(在输出时)。

  • 一个KEEP语句应用于DATA步中的所有输出数据集,并且可以在数据步骤中的任何地方使用。

  • 在一个DATA步中可以使用多个KEEP语句。所有这些都将应用于输出数据集。

  • KEEP语句中未列出的变量位于PDV上,可用于当前DATA步,直到输出为止。

  1. KEEP=数据集选项
  • 在输入数据集上使用时,KEEP=数据集选项指定了哪些变量从数据集读取到PDV(在进入时)。

  • 在输出数据集上使用时,KEEP=数据集选项指定了哪些变量从PDV写入输出数据集(在输出时)。

  • 所有变量都在PDV上,并可在当前DATA步中使用,直到输出。

  • 必须为所有数据集选项指定其应用的数据集。

  • 多个KEEP=数据集选项可用于同一个数据集。

  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Miya_o00

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值