SAS语句和SAS数据集选项之间的一些区别
在代码中的位置
SAS语句出现在DATA步代码中的任何地方。
数据集选项只出现在Data语句或输入语句(如SET、MERGE或UPDATE)中。
应用范围
SAS语句适用于在DATA步中创建或读取的所有数据集。
数据集选项仅应用于其附加的数据集。
何时生效
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:在输入数据集中使用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个变量。
示例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中对输出数据集而不是输入数据集使用数据集选项,则会出现相同的消息。
示例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;
试图总结的一些规律
(其实是一些重复且啰嗦的话,希望能有助于理解。)
DROP语句
DROP语句指出PDV中的哪些变量不应该写入输出SAS数据集。
DROP语句在写入输出数据集时生效(在输出时)。
一个DROP语句应用于DATA步中的所有输出数据集,并且可以在数据步骤中的任何地方使用。
在一个DATA步中可以使用多个DROP语句。所有这些都将应用于输出数据集。
DROP语句中列出的所有变量都在PDV上,可用于当前DATA步,直到输出为止。
DROP=数据集选项
在输入数据集上使用时,DROP=数据集选项指定了哪些变量不从数据集读取到PDV(在进入过程中)。
在输出数据集上使用时,DROP=数据集选项指定了哪些变量PDV不写入输出数据集(在输出过程中)。
必须为所有数据集选项指定其应用的数据集。
多个DROP=数据集选项可用于同一个数据集。
KEEP语句
KEEP语句指出PDV中的哪些变量应该写入输出SAS数据集。
KEEP语句在写入输出数据集时生效(在输出时)。
一个KEEP语句应用于DATA步中的所有输出数据集,并且可以在数据步骤中的任何地方使用。
在一个DATA步中可以使用多个KEEP语句。所有这些都将应用于输出数据集。
KEEP语句中未列出的变量位于PDV上,可用于当前DATA步,直到输出为止。
KEEP=数据集选项
在输入数据集上使用时,KEEP=数据集选项指定了哪些变量从数据集读取到PDV(在进入时)。
在输出数据集上使用时,KEEP=数据集选项指定了哪些变量从PDV写入输出数据集(在输出时)。
所有变量都在PDV上,并可在当前DATA步中使用,直到输出。
必须为所有数据集选项指定其应用的数据集。
多个KEEP=数据集选项可用于同一个数据集。