datastep

时间:2016-08-07 22:41:46

标签: sas dataset

我读了很多关于第一个的内容。最后。 SAS中的函数和基本计算,虽然我想绕过datastep中的以下问题(如果可能):

我需要标记每个方向上超过第25个百分点的每个观察。即我想计算异常值并给它们1或0(异常值或非异常值)。我遇到的问题是我想为数据集中的一组/一组观察做这件事。

Group Value OutlierFlag
a    1     1
a    10    0
a    11    0
a    400   1
b    2     0
b    2     0
b    500   1

使复杂/前进:我需要添加一个时间网格,这意味着我需要每分钟对所有观察值求和,并将值写入一种网格(当前观察值不在指定的时间间隔内)。我已经制作了网格(分钟步骤)。但是,我如何总结观察结果并将其包含在每分钟观测中的网格数据中? 如果这太模糊,我很抱歉,但也许你们中的一个人知道怎么做或有想法。我非常感谢!

最佳!

编辑:

好吧,我测试过:

proc means data = MM.Data median P25 P75; 
class Security;
ods output Summary=mm.Data_median; 
var price spread; run; 

data mm.data; set mm.Data_median;
run; 

这基本上给了我Proc Proc Output。但我希望原始数据集充满p25和p75变量。 然后我试了一下:

proc sql; 
create table mm.newData as select *, sum(spread) as sumspread 
from mm.Data 
group by RIC; quit; 

但是它首先将它再次分组,然后没有P25功能(我只是为了试用而输入了总和)。

1 个答案:

答案 0 :(得分:3)

  • 添加STACKODS& Proc的NWAY选项意味着。这只计算在 最高级别(即仅在组级别)并保持数据范围。
  • 合并使用BY组

    proc means data=sashelp.class nway stackods median p25 p75;
        class sex;
        var weight;
        ods output summary=stats;
    run;
    
    proc sort data=sashelp.class out=class;
        by sex;
    
    data want;
        merge class stats (keep=sex median p25 p75);
        by sex;
        flag_p75=ifn(weight>p75, 1, 0);
    run;