【发布时间】:2015-07-04 05:10:55
【问题描述】:
好吧,这似乎是一件非常简单的事情,但我无法解释 sas datastep 中的“by statement”到底在做什么。我知道什么时候需要使用它,但我不确定它在做什么。
在下面的示例中,我了解 first.var 和 last.var 的虚拟 sas 列是什么,当它具有它的值时。 by 语句是否在 var initial 和 metal 周围创建了这些虚拟列?那么sas是扫描整个数据集一次呢?
data jewelers ;
input id initial $ metal $ ;
datalines;
456 D Gold
456 D Silver
123 L Gold
123 L Copper
123 L PLatinum
567 R Gold
567 R Gold
567 R Gold
345 A Platinum
345 A Silver
345 A Silver
;
proc sort ;
by initial metal ;
run;
data dups;
set jewelers ;
by initial metal ;
if not (first.metal and last.metal) then output;
run;
如果我 proc print dups 我希望这样:
567 R Gold
567 R Gold
567 R Gold
345 A Silver
345 A Silver
【问题讨论】:
-
在您的示例中,
first.id和last.id未初始化,因为它们未出现在by语句中。要查看创建了哪些隐藏变量,请在by语句之后添加put _all_;语句。 (仅对小型数据集执行此操作,因为它有可能填满日志)。
标签: duplicates sas datastep