首页 文章

SAS:proc Summary和proc Sort

提问于
浏览
0

如果你将proc摘要与class-clause一起使用,它将按照 class -clause的顺序对你的观察进行排序 .

proc summary data=One;
   by var_1;
   class var_2 var_3 var_4;
   output out = Two(drop= _freq_ _type_);
run;

1)我是对的吗?

2)如果我没有指定所有字段会发生什么?

proc summary data = Three(keep= var_1 var_2 var_ 3 var_4 var_5 var_6);
   by var_1;
   class var_2 var_3;
   output out = Four(drop= _freq_ _type_ );
run;

3)哪个处理更快: proc summaryproc sort

1 回答

  • 5

    这里有几点需要注意 .

    • 为了保留相同数量的行,您需要在proc summary语句中指定nway选项 . 没有它,您将获得每个1,2和3组类变量 .

    • 我不知道为什么你有BY语句(这显然表明数据已经被该变量排序) . 您可以在CLASS语句中轻松包含var_1 .

    • Proc Summary将首先按BY变量的顺序对输出进行排序,然后按照指定的顺序对CLASS变量进行排序 .

    • 无论保留哪个变量,该逻辑都适用 .

    • Proc Sort应该在这个简单的实例中更快地工作,因为Proc Summary将执行不需要的进一步计算 .

    • 我有时会使用Proc Summary在一个步骤中对数据进行排序和重复数据删除(使用maxid函数),例如我每天有多个ID,我只想拿最新的ID . 这节省了必须对数据进行排序,然后每个ID每天提取最后一条记录 .

    希望这可以帮助 .

    这是我最后一点的一个例子 . 使用 _all_ 要求返回数据集中的所有变量,这会在日志中为先前在CLASS语句中列出的变量创建警告,但可以安全地忽略它 . 基本上我懒得不想为宽数据集分别指定剩余的变量 .

    data have;
    input unique_id custno log_dt :datetime15.;
    format log_dt datetime15.;
    cards;
    1 123 01jul2012:13:23
    2 265 01jul2012:13:56
    3 342 01jul2012:15:02
    4 123 01jul2012:17:12
    5 342 01jul2012:18:33
    6 265 02jul2012:08:41
    7 123 02jul2012:10:14
    8 265 02jul2012:11:05
    ;
    run;
    
    proc summary data=have nway;
    class custno log_dt;
    format log_dt dtdate9.;
    output out=want (drop=_:) maxid(log_dt(_all_))=;
    run;
    

相关问题